![]() |
Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
Halli,
habe zwei TidHTTP-Komponenten. Wie kann ich die eingstellten Werte der ersten Komponente am einfachsten auf die zweite übertragen? Wenn ich Assign benutze, bekomme ich eine AV. Wenn ich z.B. folgendes mache:
Delphi-Quellcode:
Dann wird auch "AnderesIdHTTP" freigegeben.
var
tmpHTTP: TIdHTTP; begin tmpHTTP := TidHTTP.Crate; tmpHTTP := AnderesIdHTTP; tmpHTTP.Free; end; Komm ich nicht drum rum, alle Eigenschaften manuell zu zuweisen? Gruß Sascha |
Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
Vermutlich nicht, nein. Zumindest kenne ich keine Lösung
|
Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
Was spricht dagegen von TidHTTP abzuleiten und Assign zu overriden.
Die resultierende Klasse packst du dir in das indy package und solltest dann TmyHTTP haben. Pseudo-delphi-code:
Delphi-Quellcode:
Dein:
type
TmyHTTP=class(TidHTTP) private protected public procedure Assign(Source:TPersistent); published end; procedure TmyHTTP.Assign(Source:TPersistent); begin if(Assigned(source) and source.InheritsFrom(TidHTTP)) then begin Self.hostname:=(source as TidHTTP).Hostname; (* ... hier eben die weiteren Sachen die du willst ... *) end else inherited Assign(Source); end;
Delphi-Quellcode:
Muss fehlschlagen, denn die Anweisung "tmpHTTP := AnderesIdHTTP;" ist nicht gleichbedeutend mit "tmpHTTP.Assign(AnderesIdHTTP)" da ersteres bewirkt bewirkt, dass tmpHTTP dasselbe Objekt referenziert wie AnderesHTTP(einfache Pointerzuweisung), während "tmpHTTP.Assign(AnderesIdHTTP)" den Inhalt der von AnderesIdHTTP referenzierten Instanz in die von tmpHTTP referenzierte kopiert.
var
tmpHTTP: TIdHTTP; begin tmpHTTP := TidHTTP.Crate; tmpHTTP := AnderesIdHTTP; tmpHTTP.Free; end; |
Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
nein es geht auch einfacher mit assign muss es gehen
Ist dein AnderesIdHTTP überhaupt schon initialiesiert also hast du .create bevor du des übertragen willst ausgeführt worden? |
Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
Ich kenne die Indy Komponenten nicht wirklich, weiss also nun nicht, ob da Assign sauber implementiert wurde.
Obigen Code bitte auf Wunschkomponente portieren. :) Wuerde mich aber schwer wundern, wenn die Indyleute das wirklich vergessen haben sollten. Ich nahm jedoch an, dass er die Kompo auf der Form plaziert hat, somit sollte .Create schon aufgerufen worden sein. Achtung Fallstrick: Annahme: in Form1.OnCreate schreibst du: tmpHTTP.Assign(form2.AnderesHTTP); Das muss fehlschlagen, wenn form1 den Hauptformular ist, da form2 zu diesem Zeitpunkt noch nicht created wurde, evtl. rennst du ja gerade in sowas rein. |
Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
Die beiden idHTTP-Komponenten sind definitiv vorhanden.
Das mit Assign funktioniert aber leider auch definitiv nicht. @Xtra: Das mit der Pointerzuweisung war mir auch klar, dass deshalb "beide" freigegeben werden. Das mit dem Ableiten ist zwar ne gute Idee, aber das brauch ich dann auch nicht machen, wenn ich da im Prinzip ja denselben Code schreiben muss, denn ich sonst auch so schreiben könnte. Ich komm ja nicht drumherum, alle Eigenschaften gleich zu setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz