Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;

[es] :: Pascal / Delphi / Kylix :: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;

[ Pregleda: 3415 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;30.08.2007. u 15:40 - pre 202 meseci
Učim delphi, počeo sam prekjuče.

Kako da uradim sledeće:

Na formi imam 10 dugmeta i edit polja (button1 ... button10, edit1 ... edit10), koji su svaki stavljeni na svoj odgovarajući panel (panel1 .. panel10). Znači, na panelu "panel3" se nalazi "button3" i "edit3". Ne znam da li ovo ima veze sa kodom koji se programira, ali eto da napomenem.

Sva dugmad i edit polja su skrivena pri startovanju programa (paneli nisu skriveni), ali bih ja trebao na osnovu rezultata neke funkcije (koji će biti izmedju 1-10) da prikažem odgovarajuće dugme i edit polje.

Znači, ako je rezultat funkcije 4, trebao bih da uradim

button4.show;
edit4.show;

Medjutim, ne želim da koristim case na ovaj način:

Code:

case X of
    1:
        begin
            edit1.show;
            button1.show;
        end;
    2:    
        begin
            edit2.show;
            button2.show;
        end;
    3:
        i tako dalje...


...jer imam još takvih procedura, i sve bi to bilo zamorno za kucanje, već želim nešto kao:

Code:

edit%BROJ%.show;
button%BROJ%.show;


gde pretpostavljamo da je %BROJ% taj broj koji je dobijen iz funkcije.

Dakle, kao to postići?
 
Odgovor na temu

NemesisMMX
Beograd

Član broj: 152324
Poruke: 28
*.ikomline.net.

Sajt: www.designbuildersoftware..


Profil

icon Re: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;30.08.2007. u 16:18 - pre 202 meseci
Najlakse je ovako:
(Ja sam sve izdvojio u jednu proceduru koja se zove ShowComponents za lakse koriscenje)
Code:

procedure TForm1.ShowComponents(ANumber: Integer);
var
edit : TEdit;
button : TButton;
begin
  edit := TEdit(FindComponent('edit' + inttostr(ANumber)));
  button := TButton(FindComponent('button'+inttostr(ANumber)));
  if edit <> nil then
  edit.Visible := true;
  if button <> nil then
  button.Visible := true;
end;


Posto si poceo tek pre neki dan verovatno ti neke stvari ovde nece biti bas jasne.
funkcija FindComponent vraca komponentu cije ime je parametar funkcije, ako je nadje.
Ako je ne nadje rezultat funkcije je nil;
Takodje, rezultat funckije je tipa TComponent zato moras da koristis type cast edit := TEdit(somecomponent);
Ovo nije sigurno, pa ako zelis da ti kode bude siguran ona ces morati da dodas jos malo koda:

Code:

procedure TForm1.ShowComponents(ANumber: Integer);
var
edit : TEdit;
button : TButton;
comp : TComponent;
begin
  comp := FindComponent('edit' + inttostr(ANumber));
  if (comp <> nil) and (comp is TEdit)  then edit := TEdit(comp)
  else edit := nil;
  comp := FindComponent('button'+inttostr(ANumber));
  if (comp <> nil) and (comp is TButton) then
  button := TButton(comp)
  else comp := nil;
  if edit <> nil then
  edit.Visible := true;
  if button <> nil then
  button.Visible := true;
end;


Pozdrav
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;31.08.2007. u 10:09 - pre 202 meseci
Odlično, radi savršeno. Hvala.

Prilagodio sam malo kod svojim potrebama:
Code:

procedure TForm1.uk(ime: string; br: byte);
//prokazuje odredjeni taster ili edit polje, cije je ime u obliku: ime + broj (taster4.show)
var
    ed : TEdit;
    but : TButton;
    comp : TComponent;
begin
        comp := FindComponent(ime + inttostr(br));
        if (comp <> nil) and (comp is TEdit) then ed := TEdit(comp) else ed := nil;
        if (comp <> nil) and (comp is TButton) then but := TButton(comp) else but := nil;
        if ed <> nil then ed.Show;
        if but <> nil then but.Show;
end;


Nego, imam sada drugo (slično) pitanje:

Svi ti tasteri treba da pozivaju istu proceduru, koja zatim radi otprilike istu stvar samo sa drugim brojem (recimo neko izračunavanje i slično). To za sada postižem time što za svaki taster postoji sopstvena procedura koja zatim poziva tu potrebnu proceduru:

Code:

procedure TForm1.taster1Click(Sender: TObject);
begin
    glavnaprocedura(1);
end;

procedure TForm1.taster2Click(Sender: TObject);
begin
    glavnaprocedura(2);
end;
procedure TForm1.taster3Click ...i tako dalje.... za svih 10 tastera...

Code:

procedure GlavnaProcedura(br: byte);
begin
    .....
end;


Medjutim, ima li neki način da svi tasteri direktno pozivaju glavnu proceduru, a da u toj proceduri postoji neki način koji bi utvrdio sa kog tastera je pozvana procedura, i na osnovu toga sam odredio taj broj?

Pozdrav
 
Odgovor na temu

NemesisMMX
Beograd

Član broj: 152324
Poruke: 28
*.ikomline.net.

Sajt: www.designbuildersoftware..


Profil

icon Re: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;31.08.2007. u 10:32 - pre 202 meseci
Ako su ti ti brojevi koje posle koristis kao parametre u glavnaprocedura fiksni (ne menjaju se tokom izvrsavanja koda) onda ti je najlakse da ih stavis u Tag property dugmeta. Znaci button1.Tag := 1, button2.Tag := 2 (to uradis u object inspector-u).
Zatim napravis samo jednu proceduru click:
Code:

procedure TForm1.tasterClick(Sender: TObject);
begin
if Sender is TButton then
  glavnaprocedura(TButton(Sender).Tag);
end;

zatim svakom dugmetu dodelis isti OnClick event (takodje u object inspectoru), tako sto iz drop down liste za onClick event izaberes tasterClick.

Sad, generalno je losa ideja da sve komponente zoves button1, button2, button3... Posle nedelju dana neces imati predstavu sta ko radi. Zato je bolje da svim komponentama na formi dajes specificnija imena. Tag property je nezavistan od imena pa tako komponente mozes nazvati kako hoces, procedura gore ce da radi bez obzira na to. Nemam opstu sliku sta radis u programu pa ne mogu da ti dam neke bolje savete osim odgovora na konkretna pitanja :)
 
Odgovor na temu

DjGoran

Član broj: 123946
Poruke: 30



Profil

icon Re: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;31.08.2007. u 12:11 - pre 202 meseci
To je to što mi treba. Hvala (opet).

Inače, imam desetak panela i na svakom panelu po nekoliko tastera i edit polja. Tasteri imaju različite funkcije u okviru panela, ali se ponavljaju na na drugom panelu uz različit indeks (tj. tag).

Da sad ne bih mnogo zalazio u pravu (komplikovanu) namenu programa, mogu to da predstavim kao nešto nalik ovome:

panel1: oduzmi1, dodaj1, podelisa1, pomnožisa1
panel2: oduzmi2, dodaj2, podelisa2, pomnožisa2
panel3: oduzmi3, dodaj3, podelisa3, pomnožisa3
itd...

Pozdrav.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Učim Delphi. Kako da uradim-> button%VARIJABLA%.show;

[ Pregleda: 3415 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.