Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Bezug auf Objecte speichern?


Holg_i - Do 18.03.10 17:32
Titel: Bezug auf Objecte speichern?
OK das mit meiner Erklärung ist wohl nicht so einfach... deswegen habe ich nun es weiter unten noch mal versucht... also das hier mal vergessen.. ich lass es drin damit der Thread auch verfolgt werden kann :)

***********************

Jetzt wird es ernst.

Also ich habe in einem MDI ein Objekt zum Beispiel TEdit nun habe ich in meinem fsMDIForm eine Array


Delphi-Quelltext
1:
2:
var
MLabel array[0..20of TEdit;


Durch Drag&Drop kann man nun


Delphi-Quelltext
1:
MLabel[X]:=TEdit(Target);                    


zuweisen.

Soweit so gut so das nachher


Delphi-Quelltext
1:
(MLabel[X] as TEdit).Text:=’Test’;                    


etwas in das TEdit übertragen werden kann.

Klappt 100% bin auch total zufrieden.

Jetzt möchte ich die mühevollen Zuweisungen die der Benutzer durch Drag&Drop gemacht hat aber abspeichern.

Speicher Zuordnung.

Und da komme ich gerade null weiter. Nein ich suche keinen der mir den Code tippt *grins* aber eventuell ist ja jemand da der mir auf die Sprünge helfen kann.


---- Habe es noch mal geändert wegen TEdit und TLabel gemisch :)


Narses - Fr 19.03.10 11:42

Moin!

Gibt deinen TEdits beim Erstellen in .Tag eine eindeutige ID mit, die kannst du dir dann merken. :idea:

cu
Narses


Holg_i - Fr 19.03.10 13:54

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

Gibt deinen TEdits beim Erstellen in .Tag eine eindeutige ID mit, die kannst du dir dann merken. :idea:

cu
Narses


Das ist glaube ich nicht möglich

Die TEdit werden auch erstellt durch das MDI

Also der Benutzer öffnet MDI-Fenster... eine Anzahl von x

nun weist er den Edit-Feldern in unterschiedlichen Fenster durch Drag&Drop zu

Die x Fenster speicher ich schon ab mit Position größe und Co und lade sie auch wieder
nur soll nun die Zuweisung mit abgespeichert werden.

Wie erkläre ich das nur mmmmmm ich hoffe man versteht mich

oder nicht?


Narses - Fr 19.03.10 15:15

Moin!

user profile iconHolg_i hat folgendes geschrieben Zum zitierten Posting springen:
Wie erkläre ich das nur mmmmmm ich hoffe man versteht mich

oder nicht?
Ehrlich gesagt: nein. :nixweiss:

cu
Narses


Holg_i - Sa 20.03.10 17:28

OK Ich versuche es noch mal hoffendlich nun besser

Hier mal ein kleiner DelphiCode in Delphi 4 getippt.


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:
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:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Unit2, Unit3, Unit4;

type
  TZuweisung= record
    La: TLabel;
    Ed: TEdit;
    Me: TMemo;
  End;



type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Panel1: TPanel;
    Panel2: TPanel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure EndDrag(Sender, Target: TObject; X, Y: Integer);
    procedure EditChange(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    Zuweisung: Array[1..3of TZuweisung;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ButtonClick(Sender: TObject);
begin
     case (Sender as TButton).Tag of
          1:TForm2.Create(self);
          2:TForm3.Create(self);
          3:TForm4.Create(self);
     end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
     Close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var I: Integer;

begin
     Timer1.Enabled:=False;
     For I:=1 to 3 do
     Begin
          Zuweisung[I].La:=Nil;
          Zuweisung[I].Me:=Nil;
          Zuweisung[I].Ed:=Nil;
     end;

     while MDIChildCount > 0 do
     begin
          if TForm(MDIChildren[MDIChildCount - 1]).Owner = self then
          begin
               TForm(MDIChildren[MDIChildCount - 1]).Close;
          end;
          Application.ProcessMessages;
     end;
end;

procedure TForm1.EndDrag(Sender, Target: TObject; X, Y: Integer);

var I: Integer;

begin
      I:=TEdit(Sender).Tag;
      IF (Target is TLabel) then
      begin
           Zuweisung[I].La:=TLabel(Target);
      end;

      IF (Target is TMemo) then
      begin
           Zuweisung[I].Me:=TMemo(Target);
      end;

      IF (Target is TEdit) then
      begin
           Zuweisung[I].Ed:=TEdit(Target);
      end;
end;

procedure TForm1.EditChange(Sender: TObject);

var I: Integer;

begin
     I:=TEdit(Sender).Tag;
     IF Zuweisung[I].La<>Nil then (Zuweisung[I].La as TLabel).Caption:=TEdit(Sender).Text;
     IF Zuweisung[I].Me<>Nil then (Zuweisung[I].Me as TMemo).Lines.Add(TEdit(Sender).Text);
     IF Zuweisung[I].Ed<>Nil then (Zuweisung[I].Ed as TEdit).Text:=TEdit(Sender).Text;
end;

procedure TForm1.FormCreate(Sender: TObject);

var i: Integer;

begin
     For I:=1 to 3 do
     Begin
          Zuweisung[I].La:=Nil;
          Zuweisung[I].Me:=Nil;
          Zuweisung[I].Ed:=Nil;
     end;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
     IF Button5.Caption='Würfel an' then
     Begin
          Button5.Caption:='Würfel aus';
          Timer1.Enabled:=True;
     end
     else
     Begin
          Button5.Caption:='Würfel an';
          Timer1.Enabled:=False;
     end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);

var W: Integer;

begin
     W:=Random(6)+1;
     case Random(3)+1 of
          1: Edit1.Text:=IntToStr(W);
          2: Edit2.Text:=IntToStr(W);
          3: Edit3.Text:=IntToStr(W);
     end;
end;

end.


Um was es hier geht.... nun ich möchte die hier gemachten zuweiseungen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.EndDrag(Sender, Target: TObject; X, Y: Integer);

var I: Integer;

begin
      I:=TEdit(Sender).Tag;
      IF (Target is TLabel) then
      begin
           Zuweisung[I].La:=TLabel(Target);
      end;

      IF (Target is TMemo) then
      begin
           Zuweisung[I].Me:=TMemo(Target);
      end;

      IF (Target is TEdit) then
      begin
           Zuweisung[I].Ed:=TEdit(Target);
      end;
end;


gerne abspeichern. da das ganze mit MDI Fenstern passiert ist die Sache für mich nicht so klar.

Anbei habe ich noch mal ein kleines Programm mitgegeben.... Einfach Fenster erstellen und die Editfelder rechts mit drag & drob hin ziehen wohin man die Würfelanzeige haben möchte...

Dann Würfel an un schon geht es los :)

Aber wie getippt es geht hier nur daraum das ich den Bezug den man hier durch Drag&Drob erstellt abspeichern möchte... Nein es ist nicht das Programm dieses hier zu Posten wäre einwenig viel es soll nur verdeutlichen was ich vor habe. Un es ist mir klar das hier bezüge noch nicht richtig aufgehoben werden.. Sucht nicht die Fehler im Programm helft mir lieber mein Problem zu lösen *grins*


Holg_i - Mo 22.03.10 19:57

Nun das abspeichern habe ich glaube ich geschafft. Die Lösung Poste ich wenn es fertig ist... aber dazu habe ich noch eine Frage.



Delphi-Quelltext
1:
AForm:=TForm4.Create(self);                    



Soweit so klar...

In dem erstellten Fenster ( AForm ) befindet sich z.B. eine TEdit mit der Procedure MyChange wie rufe ich die nun auf?

mit


Delphi-Quelltext
1:
TEdit(AForm.FindComponent('MeinEdit')).MyChange(Self);                    


klappt es ja nicht. Wo denke ich falsch?


ALF - Mo 22.03.10 20:12

Hi, evtl!?

Delphi-Quelltext
1:
TEdit(AForm.FindComponent('MeinEdit')).onChange := MyChange;                    

Bin mir aber nicht sicher, ob du das meinst?
Gruss ALf


Holg_i - Mo 22.03.10 20:12

Die Nachteile eines Forums bestehen darin das man immer viel zu schnell Fragen stellt *grins*
Als ich noch einzelkämpfer war und keinen Forum angehört habe hat es ja auch geklappt. Mann hat halt eventuel länger gebraucht :-)

Also die Antwort auf meine Frage ist


Delphi-Quelltext
1:
TEdit(AForm.FindComponent('MeinEdit')).MyChange(Self);                    


ist schon fast richtig. Auch wen ich die OnChange Procedure anderst benannt habe muss ich OnChange aufrufen.

Sorry für das dumme Fragen.

Aber für die eigendliche Frage habe ich ja noch keine Antwort. Bei mir läuft es zwar... Aber ob das der beste Weg ist ???

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
Hi, evtl!?

Delphi-Quelltext
1:
TEdit(AForm.FindComponent('MeinEdit')).onChange := MyChange;                    

Bin mir aber nicht sicher, ob du das meinst?
Gruss ALf


danke dir da waren wir Zeitgleich....

wie getippt

Delphi-Quelltext
1:
TEdit(AForm.FindComponent('MeinEdit')).onChange := MyChange;                    



Immer die Proceduren der Komponente aufrufen ... nicht den Procedurnamen.