Status bar, ikonki i hinty

Status bar, ikonki i hinty
JU
  • Rejestracja:około 22 lata
  • Ostatnio:2 miesiące
  • Postów:5042
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:ponad 19 lat
  • Ostatnio:ponad 13 lat
  • Postów:131
0

Muszisz się pobawić Canvasem.

JU
  • Rejestracja:około 22 lata
  • Ostatnio:2 miesiące
  • Postów:5042
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:ponad 19 lat
  • Ostatnio:ponad 13 lat
  • 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:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

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


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
Morris
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 minuty
  • 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.


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • 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:ponad 19 lat
  • Ostatnio:4 minuty
  • 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;

:)


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
Morris
  • Rejestracja:ponad 19 lat
  • Ostatnio:4 minuty
  • 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).


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage

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.