Sender as TSpeedButton

Sender as TSpeedButton
SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
0
Kopiuj
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 ??

Smiglo
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 15 lat
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.

SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
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.

spc
  • Rejestracja:ponad 19 lat
  • Ostatnio:21 dni
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".


00, OK, 00, 00
...dziś się to robi na sprzętach, kiedyś na patentach...
SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
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.

Smiglo
  • Rejestracja:około 22 lata
  • Ostatnio:ponad 15 lat
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 :/

brodny
  • Rejestracja:ponad 22 lata
  • Ostatnio:prawie 11 lat
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.


Mam nadzieję, że pomogłem :) Łukasz Brodny
SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
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.

Odysseus
  • Rejestracja:ponad 20 lat
  • Ostatnio:ponad 11 lat
0

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

Kopiuj
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:

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

lub

Kopiuj
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 ;)


wiem, że nic nie wiem
SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
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.

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
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ć


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
JU
  • Rejestracja:około 22 lata
  • Ostatnio:2 miesiące
  • Postów:5042
0

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

Kopiuj
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

SA
  • Rejestracja:około 22 lata
  • Ostatnio:prawie 6 lat
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

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.