Status bar, ikonki i hinty

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?
0

Muszisz się pobawić Canvasem.

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....

0

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

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;
0

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

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.

0

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

a zanim sie ktos zapyta...

const SB_SETICON = WM_USER + 15;
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...

const SB_SETICON = WM_USER + 15;

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

:)

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ś:

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

Potem dalej w kodzie:

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ą:

  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).

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