Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 18.04.12 13:44 
Laut einem Tipp auf SwissDelphichenter kann man diverse Controls/Komopnenten zur Laufzeit mittels Memorystream klonen.

www.swissdelphicente.../showcode.php?id=785

Leider versagt diese Möglichkeit bei einem TUpDown. Es gibt immer einen Speicherfehler beim Lesen des Streams:

ausblenden 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:
    if TabSheet_Setup_Dummy.Controls[x] is TUpDown then
    begin
      ms := TMemoryStream.Create;
      try
        Dummy_UpDown := TabSheet_Setup_Dummy.Controls[x] as TUpDown;
        s := TabSheet_Setup_Dummy.Controls[x].Name;
        TabSheet_Setup_Dummy.Controls[x].Name := '';
        try
          ms.WriteComponent(Dummy_UpDown);
          ms.Position := 0;
          p_UpDown := TUpDown.Create(Self);

// Hier tritt der Fehler auf
          ms.ReadComponent(p_UpDown);
// !
          begin
            p_UpDown.Name := 'zufallsname';
            p_UpDown.Parent := Dummy_Sheet;
          end;
        finally
          Dummy_UpDown.Name := s;
//          TabSheet_Setup_Dummy.Controls[x] := Dummy_MaskEdit;
        end;
      finally
        ms.Free;
      end{ finally }
    end;


Mein Code ist ein wenig anders, da ich auf einem TabSheet alle Controls durchgehe und diese auf ein neues Tabsheet kopieren möchte.

Kann mir jemand helfen und sagen, warum das beim UpDown nicht geht ?

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 18.04.12 18:56 
mit der Ergänzung vor Deinem Codeauszug
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
 x:Integer;
 ms:TMemoryStream;
 Dummy_UpDown,p_UpDown:TUpDown;
 s:String;

begin
for x := 0 to TabSheet_Setup_Dummy.ControlCount -1 do


läuft es bei mir mit XE ohne Fehler ....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 18.04.12 22:11 
In einem neuen Project geht das tatsächlich.

Das Problem habe ich endlich gefunden: Das UpDown ist einem Edit zugeordnet.

Somit wird, wenn ControlCount durchlaufen wird, das Editfeld nicht auf dem neuen Parent nicht existiert und das UpDown zuerst kopiert wird, ein Fehler - zu Recht ausgegeben, da keine Assoziation bestehen kann.

Abhilfe schafft hier die Verknüpfung zu lösen und auf OnChange vom UpDown selbst zu reagieren und den Wert ins Editfeld einzutragen.

Wenn jeman eine Lösung kennt, wie die Assoziation beibehalten werden kann, lasst es mich doch bitte wissen :)

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)