Status bar, ikonki i hinty

Status bar, ikonki i hinty
JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

Mam statusBar no i wiadomo, że podzielony jest na panele. Teraz moje pytania:

  1. Jak na panelu umieścić ikonkę?
  2. Jak pokazać hinty - oddzielne hinty, dla oddzielnych paneli?
JC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 131
0

Muszisz się pobawić Canvasem.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0
-=JaCkObS=- napisał(a)

Muszisz się pobawić Canvasem.

Z tym, że Panel statusu nie ma Canvasa(a przypisać TControlCanvas też nie można). Tak więc musiałbym malować wszystko na całym statusie. Trochę bez sensu. Chyba już po prostu będę mu przypisywał TImage jako dziecko....

JC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 131
0

No tak... ale możesz zrobić coś takiego:

Kopiuj
procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar; Panel: TStatusPanel;
  const Rect: TRect);
begin
if Panel = Statusbar1.Panels[NrPanela] then
begin
{...}
Statusbar1.Canvas.FillRect(Rect);
Statusbar1.Canvas.Draw(Rect.Left, Rect.Top, ZoneIcon);
end;
else {...}
end;
Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
0

http://delphi.about.com/library/weekly/aa030805a.htm
tak samo z image czy co tam chcesz

Morris
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
-=JaCkObS=- napisał(a)

Muszisz się pobawić Canvasem.

Nic nie musisz. Wystarczy wysłać do StatusBara komunikat i on już sam będzie rysował ikonę. Ten komunikat to SB_SETICON.

cimak
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1668
0

a faktycznie ;]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrfsb_seticon.asp

a zanim sie ktos zapyta...

Kopiuj
const SB_SETICON = WM_USER + 15;
Morris
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
cimak napisał(a)

a faktycznie ;]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrfsb_seticon.asp

Ja bym raczej skierował na: http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/status/messages/sb_seticon.asp (bo w Delphi raczej nie pisze się programów dla WindowsCE :) )

cimak napisał(a)

a zanim sie ktos zapyta...

Kopiuj
const SB_SETICON = WM_USER + 15;

zanim ktoś zapyta:
uses
..., CommCtrl;

:)

Morris
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0
Juhas napisał(a)

Mam statusBar no i wiadomo, że podzielony jest na panele. Teraz moje pytania:
2. Jak pokazać hinty - oddzielne hinty, dla oddzielnych paneli?

W module, zaraz na początku, a w każdym razie przed deklaracją klasy formatki, umieść takie coś:

Kopiuj
  TStatusBar = class(ComCtrls.TStatusBar)
  public
    procedure CreateParams(var Params: TCreateParams); override;
  end;

Potem dalej w kodzie:

Kopiuj
procedure TStatusBar.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or SBT_TOOLTIPS;
end;

Spowoduje to włączenie wyświetlania hintów przez StatusBar. Hinty dodaje się za pomocą:

Kopiuj
  SendMessage(StatusBar.Handle, SB_SETTIPTEXT, _NUMER_, Integer(PChar(TIPTEXT)));

gdzie NUMER to liczony od zera numer "komórki" statusbara a TIPTEXT to oczywiście tekst hinta.

Takie hinty mają jedną wadę: nie są zawsze wyświetlane. StatusBar wyświetla hint dla "komórki" tylko w dwóch przypadkach:

  1. jeśli "komórka" zawiera tylko ikonę
  2. jeśli tekst "komórki" jest dłuższy niż ta "komórka"

Ten drugi przypadek można wymusić: za właściwym tekstem komórki należy umieścić dużo spacji. Tu też jest ograniczenie, bo tekst dla "komórki" może mieć maksymalnie 127 znaków (nie dotyczy to "komórek" typu OwnerDraw).

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.