Rozpoznanie komponentu

0

Hey.
Mam na formie np. 2 lub 3 Image dla których chcę napisać jedną procedurę OnClick w której wykryto by który komponent został kliknięty. Jak wykryć, który komponent wywołał procedurę?

Dziękuję jeśli ktoś by odpisał.

0

każdy komponent ma właściwość Tag i teraz możesz z niej skorzystać. W OI każdemu TImage ustawiasz wartość Tag na np. 0, 1, 2. Podpinasz OnClick do Jednego komponentu i dajesz tak:

procedure TForm1.Image1Click(Sender: TObject);
begin
 if (Sender=TImage) then
  begin
     if (Sender as TImage).Tag = 0 then ShowMessage('0');
     if (Sender as TImage).Tag = 1 then ShowMessage('1');
     if (Sender as TImage).Tag = 2 then ShowMessage('2');
  end;
end;
ups sorx mój błąd :)
zamiast
 if (Sender = TImage) then
powinno być
 if (Sender is TImage) then
0

A po co się męczyć...

if Sender = Image1 then ...
if Sender = Image2 then ...

:)

0

:-)

0

DETOX-a rozwiazanie ma większy sens jesli jest mało elementów, bo wtedy najprosciej wywoływac je po nazwie.
Milka ma lepszą koncepcję jeśli będzie więcej elementów np. 10, ale:

  1. Tag-i najpierw trzeba własnoręcznie poustawiać w Object Inspectorze (domyślnie dla każdego Image-a jest 0)
  2. wtedy nalezałoby użyć struktury case
case (Sender as TImage).Tag of
                 0:    .......;
                 1:    .......;
                  .............
                 x:    ........;
end;
0

Hey.
Mam na formie np. 2 lub 3 Image dla których chcę napisać jedną procedurę OnClick w której wykryto by który komponent został kliknięty. Jak wykryć, który komponent wywołał procedurę?

Dziękuję jeśli ktoś by odpisał.

Może jemu chodziło o to żeby tylko wiedzieć który był kliknięty a nie w zależności od tego który kliknięty robić co innego - <ort>przecieŻ</ort> jaki sens ma wówczas wspólna procedura ? !

MAX :

To który komponent wywołał zdarzenie możesz wysnioskować po zmiennej Sender. Jeśli chcesz mieć nazwę komponentu piszesz
(Sender as TImage).Name
i tak samo jest z dostępem do innych właściwości, oczywiście bezpieczniej jest na początku sprawdzić czy parametr jest takiego jak chcemy typu czyli
If (Sender is TImage) then
ale jak masz trzy Obrazki, zaznaczysz je naraz (z Shiftem) i klikniesz w inspektorze obiektów na zdarzeniu OnClick to delphi przypisze 1 procke do wszyskich, i wtedy nie ma co tego sprawdzac (chyba ze se zle zaznaczysz : ) )

0

kalifat, - nie wydaje mi się. Ja używam zwykłego Sender, i nie mieszam do tego Tag, ale to tylko kwestia podejścia.. - w zależności kto co lubi...

Dodam tylko, że zamiast

(Sender as TImage).Name - lepiej dać: TComponent(Sender).Name [ albo as TComponent jak kto woli ] - i mamy pewność, że program się nie rozkraczy

0

tagi trzeba ręczni ustawiać tylko wtedy jeżeli chcemy mieć jakiś konkretny ort!, w przeciwnym razie można napisać odpowiednią procedurkę (np. co będzie pobierała pozycje kontrolki, potem mały sort i nadanie taga).

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