Wie ktoś może, jak zrobić, żeby caption na przycisku można było napisać w kilku linijkach, bo tak jak jest z captionem labela (tzn. 'cos1'+#13#10+'cos2') to nie działa niestety...
--> OnPaint i rysuj
Button1.WordWrap := true;
<font color="green">Button1.WordWrap := true;</span>
Klasa TButton nie posiada właściwości WordWrap.
heh u mnie posiada, Delphi 7 enterprise
--> OnPaint i rysuj
TButton nie ma własciwości OnPaint. A jeśli chodzi o OnPaint formy, to jakoś rysowanie w tym momencie nie działa. Swoją drogą, jestem ciekawy, w jaki sposób dowiedzieć się, ze button dostał focusa lub został wciśnięty. Jakieś pomysły?
w jaki sposób dowiedzieć się, ze button dostał focusa lub został wciśnięty. Jakieś pomysły?
Własna klasa buttona? ;p
Thenkles : Jednym ze sposobów sprawdzenia, czy button dostał focusa, jest sprawdzanie w timerze (a innych sposobów nie znam):
if button1.Focused then //cośtam
Z tym wciśnięciem, to zależnie o co ci chodzi. Jeśli o to, że został kliknięty, to wiadomo, OnClick. A jeżeli tylko wciśnięty, ale nie kliknięty, to chyba można OnMouseDown i wykorzystać tam TShiftState.
//DOPISANE
Ikari, błagam cię, wstrzymaj się czasami ze swoimi odpowiedziami, bo potrafią zdołować.
Ikari, błagam cię, wstrzymaj się czasami ze swoimi odpowiedziami, bo potrafią zdołować.
Ale to było całkiem poważnie! To tak samo jak w TImage brakue Ci zdarzeń takich jak wejście i wyjście myszki - komponent ImagePlus (czy to nie autorstwa Adama Boducha?) to właśnie klasa dziedzicząca od klasy Image'a ale dodakowo obsługująca dwa komunikaty więcej - więc to absolutnie poważny sposób na dodawanie zdarzeń....
Z tym wciśnięciem, to zależnie o co ci chodzi. Jeśli o to, że został kliknięty, to wiadomo, OnClick. A jeżeli tylko wciśnięty, ale nie kliknięty, to chyba można OnMouseDown i wykorzystać tam TShiftState.
Wiesz, na to bym sam wpadł :-|... To opisują przecież podstawowe kursy. Chodziło mi o wykrycie stanu wciśnięcia przycisku, nie ważne, czy był on wciśnięty za pomocą myszki, klawiatury, czy jeszcze czego innego. Z tą klasą, to chyba rzeczywiście niezły pomysł, tylko, że dużo byłoby roboty, bo chciałem to zastosować do buttona, radiobuttona, checkboxa, pagecontrola, itd...
Thenkles:
procedure TForm1.Button1Enter(Sender: TObject);
begin
Label1.Caption:='Button1 ma focus';
end;
procedure TForm1.Button1Exit(Sender: TObject);
begin
Label1.Caption:='Button1 nie ma focusa';
end;
//dodatkowo można:
procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
Label1.Caption:='Aplikacja nie ma focusa';
end;
procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
begin
if Button1.Focused then Label1.Caption:='Button1 dostal focus razem z aplikacja'
else
Label1.Caption:='Aplikacja dostala focus ale Button1 nie';
end;
PQ: Tylko musiałbym robić zmienne boolean, mówiące, czy przycisk ma focus, dla każdego buttona. Rozwiązanie mało eleganckie. Próbuję właśnie napisać prosty komponent na bazie TButton, obsługujący komunikat WM_PAINT i posiadający własciwość Canvas. Zobaczymy, co z tego wyniknie.
// Odpowiedź na post poniżej:
Chodzi mi o rysowanie własnego wyglądu dla buttona. Dlatego muszę wiedzieć, czy button ma focus i czy jest wciśnięty, itd. No i jakoś niespecjalnie też chcę używać timera do ciągłego odrysowywania.
Hmmm, moze ja nie zrozumialem. Jezeli chcesz wykryc moment, kiedy Button dostaje lub gubi focus, to masz zdarzenia OnEnter i OnExit. Dwa nastepne zdarzenia mojego kodu obsluguja sytuacje, gdy Button traci/dostaje focus, bo cala aplikacja przestaje/zaczyna byc aktywna (wtedy nie ma Button.OnExit/Enter).
Ale jesli chcesz po prostu sprawdzic, czy Button w danym momencie ma focus, to nie musisz robic zmiennej - ona jest: Button (i nie tylko) ma wlasciwosc Focused:Boolean.
Ludzie, ale kombinujecie :-D
Button ma włąściwość Multiline, tylko że niedostęną z VCLa:
Można to obejść: (sprawdzone)
var
L: integer;
begin
L:= GetWindowLong(Button1.Handle, GWL_STYLE);
L:= L or BS_MULTILINE;
SetWindowLong(Button1.Handle, GWL_STYLE, L);
Button1.Caption:= 'Linia 1'#13#10'Linia 2';