Status bar, ikonki i hinty

Odpowiedz Nowy wątek
2006-08-30 12:09
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?

Pozostało 580 znaków

2006-08-30 12:52
0

Muszisz się pobawić Canvasem.

Pozostało 580 znaków

2006-08-30 13:10
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....

Pozostało 580 znaków

2006-08-30 14:18
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;

Pozostało 580 znaków

2006-08-30 14:52
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

Pozostało 580 znaków

2006-08-31 23:27
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
morris#rarlab*com

Pozostało 580 znaków

2006-08-31 23:41
0

a faktycznie ;]
http://msdn.microsoft.com/lib[...]5/html/wce50lrfsb_seticon.asp

a zanim sie ktos zapyta...

const SB_SETICON = WM_USER + 15;

Pozostało 580 znaków

2006-08-31 23:52
0
cimak napisał(a)

a faktycznie ;]
http://msdn.microsoft.com/lib[...]5/html/wce50lrfsb_seticon.asp

Ja bym raczej skierował na: http://msdn.microsoft.com/lib[...]tatus/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;

:)


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
morris#rarlab*com

Pozostało 580 znaków

2006-09-01 08:08
0
Juhas napisał(a)

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

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


M.O.R.R.I.S.: Mechanical Obedient Replicant Responsible for Infiltration and Sabotage
morris#rarlab*com

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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