Autor Beitrag
walvaterwotan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23



BeitragVerfasst: Mo 26.07.04 22:19 
Hallo ihr Delpi-Pro's da draussen :)

Also ich hab da mal ne Frage (jaja, weiss ... is logisch, wenn ich hier poste :oops:)

nunja, ich möchte gern wissen, wie ja auch schon in der Überschrift steht, ob man Prozeduren in Schleifen ausführen kann. Ich möchte das ganze, weil ich ca. 30 Edit-Felder habe und immer etwas anderes ausgeführt werden soll, wenn man in solch eine hinein klickt. Deshalb möchte ich nicht für jede Edit-Komponente extra ein "OnClick" Ereignis machen, sondern suche nach neuen Wegen ....

Ich hatte mir das so in etwa gedacht ..
ausblenden Delphi-Quelltext
1:
2:
3:
4:
For i:=1 To 30 Do
 Begin
  (procedure findcomponent('edit'+intTOstr(i) as ???).OnClick;
 end;


Ich weiss, dass es soch Schwachsinn ist, da sowas nur bei Komponentenklappt, nur so kann ich vielleicht mein Problem verdeutlichen!

So, ich hoffe ihr versteht mich und könnt mir zu dieser späten Stunde helfen :/


Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Di 10.08.2004 um 16:04
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.07.04 22:29 
so kannst du es machen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
for i:= 1 to 30 do
begin
 TEdit(findcomponent('edit'+IntToStr(i))).OnClick;
end;


Nur ist die Frage ob man bei 30 Edit-Fenster nicht vielleicht doch sinnvolle Namen verteilen sollte.
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 26.07.04 22:29 
Moin!

Weise allen deinen Edits bei dem jeweiligen Ereignis nur eine Procedure zu. Darin kannst du dann die Edits unterscheiden, die das Ereignis ausgelöst haben, weil diese Objekte immer als "Sender" übergeben werden.

Das ist die Grundlage: Fragen zur Ausführung?

MfG
Muetze1
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.07.04 22:36 
Hmm, vielleicht sollte ich postings ein bissl aufmerksamer lesen... :oops: :autsch:

allerdings schließt das:

walvaterwotan hat folgendes geschrieben:
und immer etwas anderes ausgeführt werden soll


sowas eigentlich schon von selbst aus :gruebel:
walvaterwotan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23



BeitragVerfasst: Mo 26.07.04 22:45 
Muetze1 hat folgendes geschrieben:
Fragen zur Ausführung?

MfG
Muetze1


JA :D

hmm ich hoffe du verstehst mich richtig, denn ich weiss mich nicht so ganz auszudrücken .. deshlab sag ich mal kurz, was genau ich machen will.

Ich möchte z.B. wenn ihc auf die 1. Edit-Komponente klicke alle "einsen" (die ich vorher zusammengerechnet habe) ausgebe. Wenn ich auf die 2. Edit-Komponente klicke, dann alle "zweien", usw....

Und da die Anzahl der Zahlen immer in der selben Variable gespeichert ist, möchte ich nicht 30 mal in jede Prozedur schreiben wollen, dass dort das Ergebniss stehen soll.

Würde dann so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.edit1Click(Sender: TObject);
Begin
 ergebnis;
end;

procedure TForm1.edit2Click(Sender: TObject);
Begin
 ergebnis;
end;


DAs würde dann bis 30 gehen und ich wollte wissen ob ich das in ner Schleife machen kann! THX!
obbschtkuche
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mo 26.07.04 22:47 
Du könntest allen Fenster die selbe Methode zuweisen und in der Property "Tag" die entsprechende Zahl speichern. Auslesen kannst du das dann mit "TComponent(Sender).Tag"
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 26.07.04 22:49 
Moin!

Hmm, ok. Das habe ich soweit verstanden und es lässt sich mit meiner Lösung kombinieren, wenn man noch was zusätzlich macht. Aber eine Frage habe ich noch, bevor ich dir die Lösung geben kann: Du rufst immer die Funktion/Methode Ergebnis auf, aber woher weiss diese, das sie nun immer die 1'en bzw. die 2'en, etc ausgeben soll? Es ist doch immer die gleiche Procedure ?

Ansonsten einfach dem Edit2 OnClick im Objektinspektor einfach die Edit1Click() zuweisen, dann brauchste nur eine Procedure.

MfG
Muetze1
walvaterwotan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23



BeitragVerfasst: Mo 26.07.04 22:57 
Muetze1 hat folgendes geschrieben:
aber woher weiss diese, das sie nun immer die 1'en bzw. die 2'en, etc ausgeben soll? Es ist doch immer die gleiche Procedure ?

MfG
Muetze1


Ohh Mist, das hab ich doch jetzt glatt vergessen :/ sry

Hmm stimmt, dann müsste natürlich das ganze so ausgeführt werden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.edit1Click(Sender: TObject);  
Begin  
 ergebnis;  
end;  

 
procedure TForm1.edit2Click(Sender: TObject);  
Begin  
 ergebnis2;  
end;


ok, so weit, so gut ... nu steht ja in procedure TForm1.edit2Click(Sender: TObject); und in ergebnis2 eine "2", das muss doch möglich sein dann forführend zu machen?!

Hmmm ich weiss, ich bin nicht leicht zu handhaben :/
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Mo 26.07.04 23:39 
Moin!

Ok, wie wäre es denn, wenn du diese "2" einfach der Procedure Ergebnis übergibst beim Aufruf? Dazu kannst du dann den Tag verwenden wie schon Obbschtkuchen gesagt hatte. Also gebe jedem Edit Feld im Objektinspektor im Tag die jeweilige Zahl und dann weise allen Edit Feldern eine OnClick Methode zu (ein und die selbe). In der schreibst du dann folgendes:

ausblenden Delphi-Quelltext
1:
  Ergebnis(TComponent(Sender).Tag);					


Dann wird deine Ergebnis Funktion immer mit genau diesem im Tag stehenden Wert des jeweiligen Edits aufgerufen...

MfG
Muetze1
walvaterwotan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23



BeitragVerfasst: Mo 26.07.04 23:52 
Muetze1 hat folgendes geschrieben:
Also gebe jedem Edit Feld im Objektinspektor im Tag die jeweilige Zahl und dann weise allen Edit Feldern eine OnClick Methode zu (ein und die selbe). In der schreibst du dann folgendes:

MfG
Muetze1



ok, thx, jetzt hab ich es sogar kapiert :D

Aber das würde ja wieder heissen, dass ich für jede Edit-Komponente ein onClick Ereignis schreiben muss und das war ja eigentlich dass, was ich verhindern wollte :/

sprich, dass würde dann so aussehen ?!:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.edit1Click(Sender: TObject);
Begin
 Ergebnis(TComponent(Sender).Tag);
end;

procedure TForm1.edit2Click(Sender: TObject);
Begin
 Ergebnis(TComponent(Sender).Tag);
end;


ok, also komm ich wahrscheinlich nich drum herum .. naja ich wollt das ganze halt nur übersichtlich machen und nicht soviel stehen haben, was gleich aussieht :/

danke schonmal
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Di 27.07.04 00:50 
Moin!

Nein, ebend nicht. Dadurch das Sender bei jedem Click immer das Edit Feld enthält was dieses Ereignis auslöst, kannst du im Objektinspektor allen deinen 30 Edit's ein und die selbe Click Routine zuweisen. Also: Eine einzige Click Routine - und alle 30 Edits zeigen auf diese eine. Und in der einen einzigen Click Routine steht nur 1x der Code drinne den du nun ebend immernoch in jede einzelne Click Routine geschrieben hast.

Hmm, jetzt klarer?

MfG
Muetze1
walvaterwotan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 23



BeitragVerfasst: Di 27.07.04 00:54 
ahhh ok, danke!

Bin echt froh, dass ich dieses Forum hier gefunden habe! "Da werden sie geholfen!!"

Sogar um diese unmenschliche Uhrzeit noch :)



Ähm ich hab in nem anderen Thread gelesen, dass ich nen Thread als "erledigt" kennzeichnen soll, wenn das Prob gelösst is .. wo mach ich das??

edith hat mir grade gezeigt wo ich das machen kann :)