Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Memo1 zur laufzeit umbenennen
DerDude - Di 13.01.04 21:30
Titel: Memo1 zur laufzeit umbenennen
Halli hallo,
habe ein kleines proplem und weiß nicht wie ich es beheben kann. ich habe mehreren button eine prozedur gegeben, in denen sie in mein memo1 einen text schreiben sollen. nun möchte ich aber, dass, wenn man auf einen anderen button klick, der name dieses memos mit einem anderen getauscht wird, damit die buttens den text jetzt in ein memo2 schreiben, dem ich aber den namen memo1 gegeben habe (ersatzweise hat mein memo1 den namen memo1b bekommen.) hier nochmal mit code:
Ich habe während der laufzeit meines programms den namen meines memo1 auf memo1b und mein memo2 auf memo1 umgenannt:
Delphi-Quelltext
1: 2:
| memo1.name:='memo1b'; memo2.name:='memo1'; |
vorher habe ich mein memo 1b unter "var" deklariert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure....; var memo1b: TMemo; begin memo1.name:='memo1b'; memo2.name:='memo1'; end; |
jetzt möchte ich das ganze aber wieder umdrehen, was mit hilfe eines editfeldes realisiert werden soll:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure....; var memo1b: TMemo; begin if edit1.text='' then begin memo1.name:='memo1b'; memo2.name:='memo1'; edit1.text:='memo' end; if edit1.text='memo' then begin memo1.name:='memo2'; memo1b.name:='memo1'; edit1.text:=''; end; end; |
ist da irgendwo ein denkfehler oder verstoße ich einfach nur gegen alle regelndes programierens???
Moderiert von
tommie-lie: Topic verschoben + Delphi-Tags hinzugefügt
maximus - Di 13.01.04 22:17
*rofl*
Verate uns warum du die namen vertauschen willst und was dein eigentliches ziel ist, dann können wir helfen :wink:
In der regel sind namen von coponenten, zur laufzeit, schall und rauch...wenn überhaupt *g*
cu.
DerDude - Di 13.01.04 23:25
Also,
ich habe ein memo-feld, in dem zitate eingefügt werden sollen, sobald man auf unterschiedliche buttons klickt (für jeden butten selbstverständlich ein anderes). alle buttons sind auf einer groupBox angebracht, die immer im vordergrund ist. nun habe ich aber noch ein anderes memo-feld auf einem anderen tab (PageControl).
wenn jetzt das andere tab, auf dem memo2 liegt, angeklickt ist, sollen meine buttons den text nicht in memo1 einfügen (welches man ja nicht sieht), sondern in memo2, aber da ich nicht jeden button neu bearbeiten möchte, so das pro buttonclick in beide memos text eingefügt wird (was auch unpraktisch wäre), dachte ich, es müsse doch gehen, einfach die namen zu vertauschen, so dass der text anstatt in memo1 in mein memo2 (jetzt memo1 genannt) eingefügt wird... gibt es eine enfachere variante?
maximus - Mi 14.01.04 00:34
Ja! Ich denke da lässt sich durchaus eine funktionierende lösung finden, nur die namen haben damit nix zu tun; denn was im code zählt sind die referenzen. zB.: memo1 wird beim compilieren durch einen binäre pointer ersetz. änderst du den namen dieser componente, so hat das auf den code keine auswirkung, nur wenn du irgendwo den namen explizit abfragst :D
Zum problem: Gib deinen buttons allen das selbe OnclickEvent. Der 'sender' ist dann dein button, anhand dessen du entscheiden kannst in welches memo du schreiben willst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| ... Procedure TForm1.OnBuClick(sender:TObject); begin if sender = button1 then memo1.lines.add(edit1.text); if sender = button2 then memo2.lines.add(edit1.text); ...
case pageControl.activePageIndex of 0:memo1.lines.add(edit1.text); 1:memo2.lines.add(edit1.text); 2:memo3.lines.add(edit1.text); end; end; |
Ist leider nicht all zu dynamisch...lösungen mit findComponent oder tag wären auch machbar. ICh emphehle hierzu die suchefunktion im forum!
cu.
DerDude - Mi 14.01.04 14:28
Hi,
so wie ich das verstanden habe, muss ich doch dann jeden button umändern, oder? Ich muss doch jedem Button sages, dass er kontrollieren soll, in welches memo er den text schreiben soll.
ich habe das mit den namen schon probiert, und nach einer fehlermeldung, schreibt er mir den text auch in mein "neues" memo1, allerdings macht er es mir dann nicht mehr rückgängig...
ok, ich habe noch eine idee... kann mir jemand sagen, wie ich nachprüfen kann, ob eine zur laufzeit erstellt komponente existiert (über "if..."). da gibt es doch einen recht simplen befehl (wusste ihn mal, habs aber wieder vergessen)
maximus - Mi 14.01.04 16:19
Achso, du erstellt die memos zur laufzeit?
Wenn die memos alle das gleiche prefix haben, dann kannst du findcomponent benutzen.
Aus'm kopf:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.onClickXY(sender:TObject); var tmpMemo:TMemo; begin tmpMemo := self.findComponent('memoPrefix'+intToStr(pageControl.activePageIndex)); if tmpMemo <> nil then tmpMemo.lines.add(edit1.text); end; |
Das wäre dann relativ dynamisch und man würde die namen benutzen. Aber umbenennen würde ich nix. Alternativ könntest du auch alle memos ind eine TObjectListe knallen und die dann durch iterieren.
wenn unklar poste mal mehr code von dir :wink:
cu.
DerDude - Mi 14.01.04 18:41
Supi,
genau das habe ich gesucht. danke!
p.s.: es hat sogar sofort funktioniert!
maximus - Do 15.01.04 01:41
Freu :D
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!