[delphi] Odoslat nazov 'Image1' do procedury

Programovacie jazyky, rady, poradňa...
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

[delphi] Odoslat nazov 'Image1' do procedury

Príspevok od používateľa DomCZo »

Cavte. Mam taky problem.

Kód: Vybrať všetko

procedure Posun(ktory: XXX);
begin
  ktory.Left := 
  ktory.Top := 
end;
Co mam napisat do toho XXX aby to fungovalo? Alebo to ma byt uplne inak?

Chcem hybat s objektom Image1 - menit jeho Left a Top poziciu. Skusal som uz TBitmap, TObject, ale nejako mi to nejde.

// Zaroven by to asi chcelo poslat mu aj, ze sa jedna o Form1, ze?

Ako by sa to dalo nastavit vseobecne, ked to dam do Image1 aby odoslal vzdy seba (Form1.Image1), ked do Image2 (Form1.Image2) hm? Diki za pomoc, ak niekto pomoze :)
...
Expert
Expert
Príspevky: 157
Registrovaný: 07 apr 2006, 18:13

Príspevok od používateľa ... »

TBitmap nema vlastnosti Left, Top, rovnako ani TObject (az jeho potomok TControl, ktoreho potomkom je zas TImage) ... co tak teda skusit procedure Posun(ktory: TImage) ? :)

a druhej casti otazky celkom nerozumiem asi... co budes davat do Image1/2 ?

inak kod ktory som skusal

Kód: Vybrať všetko

procedure Posun(ktory: TImage);
begin
  ktory.Left := 10;
  ktory.Top := 30;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Posun(Image1);
end;
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Ano, diki moc to som potreboval.
S tym Form1 vlastne nic...
Uz len taky detail:

Kód: Vybrať všetko

procedure TForm1.Image2Click(Sender: TObject);
begin
  Posun(Image2);
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
  Posun(Image3);
end;
Ci sa neda nastavit nejako vseobecne, aby sa do tych zatvoriek nemuselo po kazdom pisat Image2, Image3 - Posun(Image2). Ci neexistuje nejake slovo, ktore odosle svoj nazov?
...
Expert
Expert
Príspevky: 157
Registrovaný: 07 apr 2006, 18:13

Príspevok od používateľa ... »

jaj takto...jasne, da sa

Kód: Vybrať všetko

procedure TForm1.ImageClick(Sender: TObject);
begin
  Posun(Sender as TImage);
end;
a obom Image-om nastavit ako OnClick proceduru ImageClick
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

... napísal:jaj takto...jasne, da sa

Kód: Vybrať všetko

procedure TForm1.ImageClick(Sender: TObject);
begin
  Posun(Sender as TImage);
end;
a obom Image-om nastavit ako OnClick proceduru ImageClick
pretypovávanie by som radšej riešil v procedúre posun. AK sa rozhodne ju proste s obrázkami robiť to isté čo s nejakými inými komponentami, tak si len zmení pár znakov v procedúre presun a nemusí meniť pretypovávanie všade z kade sa volá. Potom by to vyzeralo takto:

Kód: Vybrať všetko

procedure TForm1.Image1Click(Sender: TObject);
begin
  posun(Sender);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  posun(Sender);
end;

. 
.
.

Kód: Vybrať všetko

procedure TForm1.posun(Sender:TObject);
begin
 if sender is TImage then with (sender as TImage) do Left:=left+5 else
 if sender is TButton then with (sender as TButton) do width:=width-3 else
 if sender is TEdit then with (sender as TEdit) do top:=top+5;
.
.
.
end;
...
Expert
Expert
Príspevky: 157
Registrovaný: 07 apr 2006, 18:13

Príspevok od používateľa ... »

no, z hladiska principov OOP je to prasacina, ale to je uz aj moje "riesenie", takze je to jedno :D fungovat to bude..
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

Mal by som este otazku, nechce sa mi vytvarat nova tema.

Viem, ze toto je blbost:

Kód: Vybrať všetko

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := 34;

  Image[i].Left := 200;
  Image[i].Top := 200;
end;
Ale myslim, ze je z toho zrejme, co by som potreboval.

Proste mal by som urcite cislo v Integer a ním chcem oznacit ImageNejakecislo. Da sa to nejako spravit? Diki moc za odpovede.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

dynamicky si vytvoríš image do dynamického poľa alebo TItemList-u
...
Expert
Expert
Príspevky: 157
Registrovaný: 07 apr 2006, 18:13

Príspevok od používateľa ... »

alebo, pri malom a statickom pocte tych obrazkov postaci zadeklarovat pole TImage-ov a niekde na zaciatku programu (TForm1.OnCreate napr.) donho popriradovat jednotlive instancie (pole[1] := Image1; pole[2] := Image2; atd.)
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

audiotrack: vytvarat objekty sme sa este neucili, takze to zatial ani nechcem vediet :-)

...: ano, tych obrazkov je 16. diki, urobil som to s tym polom a funguje.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

DomCZo napísal:audiotrack: vytvarat objekty sme sa este neucili, takze to zatial ani nechcem vediet :-)

...: ano, tych obrazkov je 16. diki, urobil som to s tym polom a funguje.
no to je čo za prístup? to nevadí že ste sa neučili, môžeš sa naučiť sám. Nie je to zložité

Kód: Vybrať všetko

  var obrazky:array[1..16] of TImage;  //globálna
.
.
.

procedure TForm1.vytvor(n:integer);
begin
   obrazky[n]:=TImage.create(nil);
   with obrazok do begin
      parent:=Form1;
      autosize:=true;
      ...  //ponastavuješ všetky vlastnosti
   end;
end;
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Skús sa pozrieť na funkciu FindComponent.
Napísať odpoveď