Autor Beitrag
DerDude
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Di 13.01.04 21:30 
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:

ausblenden Delphi-Quelltext
1:
2:
memo1.name:='memo1b';
memo2.name:='memo1';


vorher habe ich mein memo 1b unter "var" deklariert:

ausblenden 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:

ausblenden 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' 
//memo ist einfach nur ein platzhalter
  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 user profile icontommie-lie: Topic verschoben + Delphi-Tags hinzugefügt
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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.

_________________
mfg.
mâximôv
DerDude Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
...
Procedure TForm1.OnBuClick(sender:TObject);
begin
  // so
  if sender = button1 then memo1.lines.add(edit1.text); // oder so
  if sender = button2 then memo2.lines.add(edit1.text); 
  ...

  // oder noch besser
  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.

_________________
mfg.
mâximôv
DerDude Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.onClickXY(sender:TObject);
var tmpMemo:TMemo; // temporäre referenz auf eins der memos
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.

_________________
mfg.
mâximôv
DerDude Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 14.01.04 18:41 
Supi,
genau das habe ich gesucht. danke!

p.s.: es hat sogar sofort funktioniert!
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 15.01.04 01:41 
Freu :D

_________________
mfg.
mâximôv