Sender as TSpeedButton

0
procedure TForm1.SpeedButtonClick(Sender: TObject);
begin
  Edit1.Text:=(Sender as TSpeedButton).Name;
 end;

Procedura powinna pokazać jaki przycisk był naciśnięty tak znalazłem na forum, ale cóś nie działa.
Muszę obsłużyć program w którym będę wyswietlał lub gasił cyferkę na kilkudziesięciu SpeedButton a pisanie tego w OnClick dla 100 elemntów jest raczej pracochłonne.

Może coś jeszcze powinienem włączyć we właściwościach lub jeszcze inną procedurę dodatkowo ??

0

Musisz teraz tą procedurę podpiąć dla wszystkich SpeedButton, które ma ona obsługiwać. Jeśli tworzysz je statycznie możesz to zrobić w Object Inspector (zdarzenie OnClick jak mnie pamięć nie myli). Natomiast jeśli tworzysz je dynamicznie, to samo musisz zrobić w kodzie programu.

0

Czyli to znaczy że muszę klikać na każdy ze stu przycisków i do OnClick wpisać skocz do procedury obługi przycisku ??

Moje przyciski są utworzone statycznie , na panelach , pogrupowane w odpowiedniej kolejności.
Jedyne co mają robić to po naciśnięciu wyswietlić swój numer lub pozostać bez opisu.

Każdy z pogrupowanych przycisków wyświetla inny numer ze swojej grupy.

0
sablik napisał(a)

Czyli to znaczy że muszę klikać na każdy ze stu przycisków i do OnClick wpisać skocz do procedury obługi przycisku ??

Moje przyciski są utworzone statycznie , na panelach , pogrupowane w odpowiedniej kolejności.

Hmmm, to moze warto by pomyslec o tworzeniu ich dynamicznie? Jezeli sa rozmieszczone w logiczny sposob, to nie bedzie to takie trudne. Jezeli nie, to po prostu zaznacz je tak jak zaznacza sie kilka ikon na pulpicie. Bedziesz mogl wtedy edytowac wlasciwosci calej zaznaczonej grupy "za jednym zamachem".

0

Zrobiłem sobie przykład : trzy speedbuttony po zaznaczeniu grupy i kliknięciu na onclick wpisuje procedurę dla pierwszego pomimo że zaznaczyłem całość.
Ostatnio nawe wziąłem się za wypełnianie wszystkich on click ale od czego jest rozumek, z tym że ostatnio chyba nie nadążam za moimi pomysłami.

0
sablik napisał(a)

Czyli to znaczy że muszę klikać na każdy ze stu przycisków i do OnClick wpisać skocz do procedury obługi przycisku ??
...
Zrobiłem sobie przykład : trzy speedbuttony po zaznaczeniu grupy i kliknięciu na onclick wpisuje procedurę dla pierwszego pomimo że zaznaczyłem całość.

Źle zrozumiałeś, zarówno mnie jak i spc.
Piszesz procedurę dla jednego dowolnego SpeedButton, a następnie podpinasz ją do reszty, czyli nie klikasz jak dotychczas dwa razy w zdarzenie OnClick, a kliknij tylko raz - pojawi Ci się rozwijana lista - tam będziesz mógł wybrać jedną z napisanych już gotowych procedur i na pewno będzie ta napisana dla jednego SpeedButtona. Po wybraniu jej obydwa SpeedButtony będą odnosić się do tej procedury obsługi zdarzenia OnClick. Możesz w ten sposób zaznaczyć grupę SpeedButton z całej formatki i podpiąć im tą samą procedurę.
Czasami warto przed przystąpieniem do czegokolwiek zapoznać się z podstawami. Pomaga w niewyrabianiu sobie złych nawyków. Nie należy też popadać ze skrajności w skrajność i do wszystkiego szukać komponentów :/

0
sablik napisał(a)

Zrobiłem sobie przykład : trzy speedbuttony po zaznaczeniu grupy i kliknięciu na onclick wpisuje procedurę dla pierwszego pomimo że zaznaczyłem całość.

To, że się nazywa "SpeedButton1Click" wcale nie oznacza, że odnosi się tylko do pierwszego SpeedButtona. Sprawdź pozostałe zaznaczone - w ich obsłudze zdarzenia OnClick też najprawdopodobniej widnieje SpeedButton1Click.

0

Zrobiłem obok edita drugą grupę przycisków, kiedy je zaznaczyłem i wybrałem procedurę dla grupu OnClick też wskoczyło mi do pierwszej dla pierwszych trzech.

Proponuję mały eksperyment 3 przyciski edit 3 przycski.
Wpierwszej grupie piszę w edicie jeden a druga grupa którykolwiek przcysk powinien zapisać dwa ale nie działa.
Myslę zę musi być jeszcze coś co sprawdzi który przycisk jest naciśnięty ale to wszystko bedzie w jednej obsłudze.

Dzięki za wszystkie rady, muszę teraz co nieco odpocząć od monitorka.
Jeśli będzie ktoś miał jeszcze coś ciekawego do napisania zapraszam.
Bo ja siedzę nad tym od wczoraj.

0

Dla komponentów tworzonych statycznie zdefiniuj następującą procedurę obsługi zdarzenia dla kontrolki SpeedButton1

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Edit1.Text:=TSpeedButton(Sender).Name;
end;

następnie przypisz ją w inspektorze obiektów pozostałym. Ten sam efekt uzyskasz pisząc:

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Edit1.Text:=TControl(Sender).Name;
end;

lub

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  Edit1.Text:=TWinControl(Sender).Name;
end;

Tworząc SpeedButtony dynamicznie nie powinieneś mieć już problemu. [soczek] Jakby co to wal śmiało ;)

0

Dzięki Odysseus.
Przykład z "as" to zły przykład ,
Twoje wszystkie trzy przykłady działają bez problemu.

Tak na koniec to okazało się że muszę oprogramować 999 przycisków żeby ładnie zrobić plansze.

Jeszcze raz dzięki.

0
sablik napisał(a)

Tak na koniec to okazało się że muszę oprogramować 999 przycisków żeby ładnie zrobić plansze.

przecież to zabójstwo dla pamięci!!! Kto normalny robi planszę z buttonów? Wystarczy choćby i stringgrid + trochę własnego kodu i miałbyś to samo jeśli nie chce Ci się ręcznie planszy rysować

0

Ludzie, od tego wymyślono pętle, żeby sobie ułatwiać życie.
Tzn. w onShow formy piszesz:

var
 i: integer;
begin
  for i:=0 to componentCount-1 do
     if(components[i] is TSpeedButton) then
       (components[i] as TSpeedButton).OnClick:=proceduraKlikniecia;
end;

Ot i cała filozofia. 3 linijki(jakby się uprzeć to jedna) kodu.
Oczywiście proceduraKlikniecia do procedura kliknięcia na speedButton

0

Panowie powolutku.

Plansza składa się z posegregowanych pól z poukładanymi przyciskami po 81 szt na 9 panelach, każde z 9 przycisków w odpowiednim czasie może być zakryte przez jeden duży przycisk, próbowałem stringgrida, próbowałem samemu rysować po kanwasie ale końcowy efekt graficzny był brzydki.
Wykorzystanie tylu przycisków wydaje się trochę dziwne ale nie lubię się męczyć z Canvasem i obliczaniem co gdzie ma się wyswietlić, musiałbym dobrze programować grafikę a tego bardzo nie lubię, zastosowanie gotowych przycisków
dało ładny efekt końcowy.Obecnie cały program ma 0,5M(exe).
Miałem tylko kłopoty z oprogramowaniem tego ale dzięki WAM znalazłem błąd i jest OK.

Pozdrawiam AS

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