Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - 120 erzeugte Images Zugriff OnClick Ereignis
tommythe1 - Mo 06.11.06 14:55
Titel: 120 erzeugte Images Zugriff OnClick Ereignis
Hallo!
Ich möchte 120 Images erzeugen lassen darein ein Bild laden und bei Klick auf irgendeins der Images soll es unsichtbar werden!
Die Imeges habe ich erzuegt und angeordent etc, bild geladen soweit ok
Jetzt kommt das Problem:
Wie weise ich jedem das OnClick Ereignis zu das es bei Klick reagiert??
Ich hoffe ihr könnt mir helfen![highlight] :?: :?:
mkinzler - Mo 06.11.06 14:59
Einfach <image>.onClick := <Methode>;
z.B. Images[100].onClick := Form1.imageonclick;
Narses - Mo 06.11.06 14:59
Moin!
Markier alle Images in der IDE und mach einen Doppelklick auf dem OnClick-Ereignis im Objektinspektor, dann wird das Ereignis für alle Images eingetragen.
Es wird dann allerdings das gleiche Ereignis für alle Images verwendet (was ja auch sinnvoll ist). Wie man dann trotzdem "sinnvoll" damit umgehen kann, kannst du
hier [
http://www.delphi-library.de/topic_VCL+Memory+Tutorial++fuer+EinUmsteiger_44084.html] sehen. ;)
cu
Narses
//EDIT: zu langsam... :|
tommythe1 - Mo 06.11.06 15:14
Narses hat folgendes geschrieben: |
Markier alle Images in der IDE und mach einen Doppelklick auf dem OnClick-Ereignis im Objektinspektor, dann wird das Ereignis für alle Images eingetragen.
//EDIT: zu langsam... :| |
Leider kann ich die Objekte nicht alle makieren, da sie während der Laufzeit erst erzeugt werden und somit vorher nichts zum makieren da ist!!
Marc. - Mo 06.11.06 15:17
Dann weiße deinen Images doch folgende Prozedur mit Hilfe einer Schleife zu, sofern du ein Array aus Imagen benutzt:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.HideIt(Sender: TObject); begin (TControl(Sender)).Hide; end; |
Narses - Mo 06.11.06 15:23
Moin!
Wenn du die Images sowieso dynamisch selbst anlegst, kannst du doch auch eine beliebige OnClick-Methode zuweisen... :?: :nixweiss: Wo ist das Problem? ;)
cu
Narses
tommythe1 - Mo 06.11.06 15:26
Narses hat folgendes geschrieben: |
Moin!
Wenn du die Images sowieso dynamisch selbst anlegst, kannst du doch auch eine beliebige OnClick-Methode zuweisen... :?: :nixweiss: Wo ist das Problem? ;)
cu
Narses |
Das Problem ist das ich 120 solche dynamisch erzeugten Objekte habe und ich dann für jedes eine eigene Procedure schreiben müsste und zuweisen. Wenn ich es immer der selben zuweise reagiert sie nur bei dem zuletzt erzeugten Element.
tommythe1 - Mo 06.11.06 15:27
Marc. hat folgendes geschrieben: |
Dann weiße deinen Images doch folgende Prozedur mit Hilfe einer Schleife zu, sofern du ein Array aus Imagen benutzt:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.HideIt(Sender: TObject); begin (TControl(Sender)).Hide; end; | |
Ne ich benutze keine array also geht das schlecht
mkinzler - Mo 06.11.06 15:30
Ich könnte mich jetzt wiederholen:
http://www.delphi-forum.de/viewtopic.php?p=398983#398983
| Zitat: |
| Ne ich benutze keine array also geht das schlecht |
Ich seh in diesem Code keinen Array.
Im Paramter sender erhältst du eine Referenz auf das auslösende Objekt.
tommythe1 - Mo 06.11.06 15:40
Versteh zur zeit nur bahnhof!!!!!!!
Was los was soll ich machen??
Bitte mal für ganz dumme
mkinzler - Mo 06.11.06 15:47
Zeig mal den Code der dynamischen Erzeugung
tommythe1 - Mo 06.11.06 15:56
mkinzler hat folgendes geschrieben: |
| Zeig mal den Code der dynamischen Erzeugung |
procedure
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| TMain.BilderErzeugen(Sender: TObject); var i, j,b: Integer; begin for j:= 0 to 1 do begin for i:= 0 to 9 do begin b:= i+j*10; imgMitarbeiter:= TMeinImage.Create(Main); imgMitarbeiter.Parent:= MAin; imgMitarbeiter.Picture.LoadFromFile('bild'+IntToStr(b)+'.bmp'); imgMitarbeiter.Stretch:= TRUE; imgMitarbeiter.Index:= b; imgMitarbeiter.Top:= 1+110*j; imgMitarbeiter.Left:= 1+110*i; imgMitarbeiter.Show;
end; end; end; |
[/delphi][list=a][*]
mkinzler - Mo 06.11.06 15:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TMain.ImageClick( Sender: TObject); begin (Sender as TImage).Hide; end;
procedure TMain.BilderErzeugen(Sender: TObject); var i, j,b: Integer; begin for j:= 0 to 1 do begin for i:= 0 to 9 do begin b:= i+j*10; imgMitarbeiter:= TMeinImage.Create(Main); imgMitarbeiter.Parent:= MAin; imgMitarbeiter.Picture.LoadFromFile('bild'+IntToStr(b)+'.bmp'); imgMitarbeiter.Stretch:= TRUE; imgMitarbeiter.Index:= b; imgMitarbeiter.Top:= 1+110*j; imgMitarbeiter.Left:= 1+110*i; imgMitarbeiter.Show; imgMitarbeiter.onClick := ImageClick; end; end; end; |
tommythe1 - Mo 06.11.06 16:03
vielen dank werde ich probieren
tommythe1 - Mo 06.11.06 16:10
ja das klappt --> vielen dank
und wenn ich jetzt wieder bei klick auf ein anderes Objekt dieses das entsprechnde Image wieder sichbar wird
also das soll immer so im Wechsel erfolgen
das was sichtbar ist machjt das andere sichtbar und sich unsichtbar
mkinzler - Mo 06.11.06 16:15
| Zitat: |
und wenn ich jetzt wieder bei klick auf ein anderes Objekt dieses das entsprechnde Image wieder sichbar wird
also das soll immer so im Wechsel erfolgen
das was sichtbar ist machjt das andere sichtbar und sich unsichtbar |
In diesem Fall mußt du dir global merken, welches Image du versteckt hast un dieses dann wieder anzeigen.
tommythe1 - Mo 06.11.06 16:57
mkinzler hat folgendes geschrieben: |
| Zitat: | und wenn ich jetzt wieder bei klick auf ein anderes Objekt dieses das entsprechnde Image wieder sichbar wird
also das soll immer so im Wechsel erfolgen
das was sichtbar ist machjt das andere sichtbar und sich unsichtbar | In diesem Fall mußt du dir global merken, welches Image du versteckt hast un dieses dann wieder anzeigen. |
Kannst das mal genauer erläutern
Schamese - Mo 06.11.06 17:11
du Solltest eine Globale Variable anlegen:
Delphi-Quelltext
1:
| var HiddenImage: TImage; |
un in der HideIt-Prozedur Folgendes noch Hinzufügen:
Gruß, Christian.
jakobwenzel - Mo 06.11.06 18:20
Eine Ergänzung: Da HiddenImage am Anfang
nil ist, musst du noch ne if-Abfrage machen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if HiddenImage<>nil then HiddenImage.Show;
if Assigned(HiddenImage) then HiddenImage.Show; |
(Assigned macht intern auch nichts anderes als die erste Version)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!