| Autor |
Beitrag |
Ruffstaarr
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 01.04.09 13:18
Hallo
Ich habe in meinem Programm 81 Labels in einem Fenster, und 81 Edits in einem Anderen.
Bevor ich wusste das es FindComponent gibt, habe ich alle manuell Manipuliert und kam mir ZIEMLICH DOOF dabei vor.
Aber Irgendwie Funtioniert es trotzem nicht...
hier mal der code
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100:
| procedure TForm2.Button1Click(Sender: TObject); var
i: integer; begin
for i := 1 to 81 do begin (FindComponent('form1.label' + IntToStr(i)) as TLabel).caption:=(FindComponent('edit1'+ IntToStr(i)) as TEdit).text; end; close; end;
end. |
wäre Nett wenn jemand helfen könnte
Moderiert von Gausi: Code- durch Delphi-Tags ersetzt
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 01.04.09 13:34
FindComponent sucht direkt bei dem Objekt, auf dass es sich bezieht. Wenn Du also Form1.FindComponent machst, sucht er nach Componenten, deren Owner deine Form ist. Du brauchstdarfst hier, da es sich um einen relativen Pfad handelt, keinen vollqualifizierten Bezeichner angeben.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.Button1Click(Sender: TObject); var i: integer; begin for i := 1 to 81 do begin (Form1.FindComponent('label' + IntToStr(i)) as TLabel).caption:=(Form1.FindComponent('edit1'+ IntToStr(i)) as TEdit).text; end; end; |
Wenn Du nicht ständig Form1 schreiben möchtest, geht auch:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm2.Button1Click(Sender: TObject); var i: integer; begin for i := 1 to 81 do begin With Form1 Do Begin (FindComponent('label' + IntToStr(i)) as TLabel).caption:=(FindComponent('edit1' + IntToStr(i)) as TEdit).text; end; end; end; |
Weiterhin kannst Du (wenn du dir absolut sicher bist, dass Du Objekte der richtigen Klasse unter diesem Namen findest) auch explizite Typecasts nutzen (ACHTUNG: Delphi prüft dann keine Typen, was zu schwer lokalisierbaren Fehlern kann, wenn man nicht weiß, was man tut!):
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm2.Button1Click(Sender: TObject); var i: integer; begin for i := 1 to 81 do begin With Form1 Do Begin TLabel(FindComponent('label' + IntToStr(i))).caption:=TEdit(FindComponent('edit1' + IntToStr(i))).text; end; end; end; |
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mi 01.04.09 23:16
Du hast 81 Labels und 81 Edit Felder. Sind die in einer eigenen GroupBox oder Panel drin? Falls ja, kannst du auch mit einer Forschleife über MyGroup.Components[] / MyGroup.ComponentCount iterieren. Dürfte einiges schneller sein als über Stringbezeichner zu gehen.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.04.09 00:38
Dei Frage ist doch eher wofür so viele Labels und Edits irgendwie sinnvoll sein sollen... Ich kann mir da keine sinnvolle Anwendung vorstellen, schließlich gibts ja auch TListView, TStringGrid, usw.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Do 02.04.09 17:38
Ich tippe auf sowas wie Sudoku. Ganz klar, 81 Edit Felder sind nicht sinnvoll, nur schon weil der Zugriff auf die Felder nicht wirklich elegant möglich ist.
|
|
Ruffstaarr 
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 02.04.09 22:20
Hallo
Danke erstmal für die schnellen Antworten...
leider bin ich TOTALER Delphi Anfänger, und, ja die sind für ein Sodoku....
habe schon ein fertiges in Turbo Pascal....
als ich versucht habe unter
Type
Label: array [1..3, 1..3, 1..9] of TLabel;
bekam ich keine Labels angezeigt...
also hab ich halt Label mit copy & paste die Labels erzeugt...
Wenn jemand ein gutes online Tutorial hat, für jemanden mit Pascal Kenntnissen wäre ich auch nicht uninterresiert
@BenBe
Zitat:
...:=(Form1.FindComponent('edit1'+ IntToStr(i)) as TEdit).text;
hinter := ... Die Edit Felder liegen doch in Form 2... muss ich trotztem Form1 schreiben?
und gehen dann die anderen codes darunter auch?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 02.04.09 22:23
Ich habe ja bereits ein TStringGrid als Alternative genannt. Wie das dann z.B. aussieht, siehst du in meinem Programm zum Lösen und Generieren von Sudokus:
www.delphi-forum.de/viewtopic.php?t=48160
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 02.04.09 22:46
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
|