TButton i kilkulinijkowy caption

0

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

0

--> OnPaint i rysuj

0

Button1.WordWrap := true;

0

<font color="green">Button1.WordWrap := true;</span>
Klasa TButton nie posiada właściwości WordWrap.

0

heh u mnie posiada, Delphi 7 enterprise

0

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

0

w jaki sposób dowiedzieć się, ze button dostał focusa lub został wciśnięty. Jakieś pomysły?

Własna klasa buttona? ;p

0

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

0

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

0

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

0

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

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.

0

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.

0

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

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