[Delphi] Tag

0

do czego służy właściwośc Tag prosze o łopatologiczne wytłumaczenie z jakims prostym przykładem
Pozdrawiam ---= pozdrawiam Oskar =- (delphi 6 GG:2792614)

0

sciema napisał:
do czego służy właściwośc Tag

Sluzy do odrozniania komponentow.

na przyklad u mnie w jednym programie jest szesc buttonow, z ktorych kazdy wywoluje te sama forme potomna, jednak wypelnia ListBox na tej formie inna zawartoscia (z jednego z 6 niewyswietlanych listboxow 'zrodlowych' sluzacych do przechowywania danych, te listboxy sa w tablicy listboxow fLists[0..5]). Na formie potomnej uzytkownik zaznacza jakies pozycje w ListBoxie 'potomnym'. Jak nacisnie OK, to zaznaczenie jest przepisywane do 'zrodlowego' listboxa do pozniejszego uzycia, ponadto automatycznie wlacza sie odpowiedni z 6 Checkboxow)

Wiec kazdemu Buttonowi nadalem inny Tag (od 1 do 6) i podpialem je pod jedno zdarzenie OnClick z nastepujaca procedura obslugi. CheckBoxy maja tez Tagi od 1 do 6

procedure TFormSession.ButtonSelectClick(Sender: TObject);
var
i, Tag:integer;
begin
Tag:=(Sender as TComponent).Tag;
{do zmiennej dla ulatwienia pisania}

FormSelect.SenderTag:=Tag;
{forma potomna tez musi wiedziec jaki jest Tag zeby przyjac odpowiedni Caption i zeby po zmianach zaznaczenia updatowac odpowiedni z 6 labelow wyswietlajacych liczbe zaznaczonych itemow - metoda FormSelect.NumberUpdate}
FormSelect.ListBoxSelect.Clear;
{wyczyszczenie listboxa na potomnej}
FormSelect.ListBoxSelect.Items.Assign(fLists[Pred(Tag)].Items);
{przepisanie Itemow na listbox na potomnej z odpowiedniego 'zrodlowego' listboxa. ktory jest odpowiedni - to wlasnie wiemy dzieki Tagowi}

for i:=0 to Pred(FormSelect.ListBoxSelect.Items.Count) do
FormSelect.ListBoxSelect.Selected[i]:=fLists[Pred(Tag)].Selected[i];
{przepisanie zaznaczen do listboxa na potomnej (mogly byc jakies zaznaczenia z poprzedniego wywolania potomnej z tym samym Tagiem)}
if FormSelect.ShowModal=mrOK then
{wywolanie formy potomnej, i jesli user nacisnie OK to...}
begin

 for i:=0 to Pred(FormSelect.ListBoxSelect.Items.Count) do
    fLists[Pred(Tag)].Selected[i]:=FormSelect.ListBoxSelect.Selected[i];

{przepisanie zaznaczen z listboxa na potomnej do odpowiedniego listboxa zrodlowego}

 for i:=0 to Pred(GroupBoxSelectTrials.ControlCount) do
   if (GroupBoxSelectTrials.Controls[i] is TCheckBox)
   and   (GroupBoxSelectTrials.Controls[i].Tag=Tag) then (GroupBoxSelectTrials.Controls[i] as TCheckBox).Checked:=True;
 end

{zaznaczenie odpowiedniego checkboxa - na podstawie Taga}

else
for i:=0 to Pred(FormSelect.ListBoxSelect.Items.Count) do
FormSelect.ListBoxSelect.Selected[i]:=fLists[Pred(Tag)].Selected[i];
{a jesli nie nacisnie OK to ponownie przepisujemy oryginalne zaznaczenie ze zrodlowego listboxa do listboxa z formy potomnej.. po co?}

FormSelect.NumberUpdate;
{ano zeby procedura updatujaca, ktora updatuje na podstawie listboxa na potomnej, przywrocila odpowiedni stan labelow informujacych o liczbie zaznaczen. procedura ta zreszta tez wykorzystuje Tag (pod postacia wlasciwosci FormSelect.SenderTag, patrz wyzej) zeby wiedziec ktore labele updatowac. procedura jest wywolywana tutaj tak dziwnie (przez odwolanie do formy potomnej i na podstawie 'potomnego' listboxa), bo typowo jest wywolywana w czasie otwarcia formy potomnej po kazdej zmianie w potomnym listboxie (OnChange). dlatego naturalne jest przypisanie je do formy potomnej. }

end;

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

A tak najprościej, to po prostu zadeklarowana z góry zmienna typu Integer przyporządkowana do komponentu, którą możesz wykorzystać jak tylko ci się podoba.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

0

heh wiem ze Tag jest typu integer ale jeszcze mam problemy z zastosowaniem tego
co mi z tego przyjdzie jak zrobie np Tform1.tag:=0 lub Tform1.tag:=1 i jaka jest róznica bo czasami sie spotykam z zapisem Tform1.tag:=0 a czasami Tform1.tag=0
operator przypisania rozumiem ale samo = to nie zabardzo chodzi mi o ten przykład tu co napisałem oczywiście
Pozdrawiam ---= pozdrawiam Oskar =- (delphi 6 GG:2792614)

0

sciema napisał:
ale jeszcze mam problemy z zastosowaniem tego
co mi z tego przyjdzie jak zrobie np Tform1.tag:=0 lub Tform1.tag:=1 i jaka jest róznica bo czasami sie spotykam z zapisem Tform1.tag:=0 a czasami Tform1.tag=0
operator przypisania rozumiem ale samo = to nie zabardzo chodzi mi o ten przykład tu co napisałem oczywiście

:= to przyporządkowanie, ale to już wiesz
a = to porównanie.

Program:
Jeżeli użytkownik nacisnął na drugiej formie przycisk OK to ustaw Form1.Tag na 1 (czyli Form1.Tag := 1;)

A gdzieś w programie na formie pierwszej jeżeli musisz sprawdzić co wykonał użytkownik to robisz tak:
Jeżeli Form1.Tag = 1 to znaczy, że użytkownik nacisnął OK
(czyli if Form1.Tag = 1 then ShowMessage('Nacisnąłeś OK');)

Równie dobrze możesz wykorzystać to jako dodatkową zmienną. Nie musisz jej deklarować.

Masz np zamienić dwie liczby miejscami: a i b
Form1.Tag := a;
a := b;
b := Form1.Tag;

Jeżeli nie potrzebujesz używać Tag to nie używaj. Wszystkich parametrów nie poznasz.--Jest jeszcze jeden błąd ... :)

Apel: Piszcie w tematach o jaki język programowania chodzi np. : [Delphi], [C++], itp.

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