[Lazarus] Taskbar button.

0

Napisałem program w Lazarusie i od 24 godzin męcze się nad usunięciem przycisku mojej aplikacji z taskbara. Udaje mi się w pełni kontolować ten przycisk, jeśli chodzi o okno formy, ale aplikacja zajmuje miejsce osobno na taskbarze, przez co, widoczny jest co najmniej jeden przycisk na taskbarze, a w przypadku ekstremalnym dwa.

Generalnie, chodzi mi o to, żeby program całkiem chował się do ikonki w trayu ;].

Żadne SetWindowLong(gwl_exstyle), ani ShowWindow(sw_hide), ani ShowInTaskbar = stNever, przechwytywanie SC_MINIMIZE czy SIZE_MINIMIZED nie działa.

Czy rozwiązał może ktoś ten problem w Lazarusie?

Dziękuję z góry.

0

Udało mi się rozwiązać problem. Droga może trochę okrężna, ale działa. Okazało się, że sposób przechwytywania komunikatów znany z Delphi w ogóle nie działa, także dopisanie dodatkowej WindowProc do głównego formularza. Udało mi się wygrzebać uchwyt głównego okna aplikacji, rodzica wszystkich pozostałych okien.

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  InterfaceBase, Win32Int, // zamiast interfaces
  Forms
  { add your units here }, Unit1; //w Unit1 jest zmienna MainHandle

begin
  WidgetSet := TWin32WidgetSet.Create;
  Application.Initialize;
  MainHandle := TWin32WidgetSet(WidgetSet).AppHandle;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Teraz już wystarczy gdzieś w głównym unicie podmienić WindowProc dla tego uchwytu i można przechwytywać komunikaty jak w Delphi. :]

Rozwiązanie ma tylko tą jedną wade, że nadaje się tylko do tych programów pisanych w Lazarusie, które mają działać tylko pod systemem Windows.

1 użytkowników online, w tym zalogowanych: 0, gości: 1