Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Eigenschaften von TidHTTP auf anderes TidHTTP übertragen (https://www.delphipraxis.net/72218-eigenschaften-von-tidhttp-auf-anderes-tidhttp-uebertragen.html)

Sascha L 27. Jun 2006 10:34


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:
var
tmpHTTP: TIdHTTP;
begin
 tmpHTTP := TidHTTP.Crate;
 tmpHTTP := AnderesIdHTTP;
 tmpHTTP.Free;
end;
Dann wird auch "AnderesIdHTTP" freigegeben.

Komm ich nicht drum rum, alle Eigenschaften manuell zu zuweisen?

Gruß
Sascha

Stefan Hueg 27. Jun 2006 12:57

Re: Eigenschaften von TidHTTP auf anderes TidHTTP übertragen
 
Vermutlich nicht, nein. Zumindest kenne ich keine Lösung

Xtra 27. Jun 2006 13:34

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:
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;
Dein:
Delphi-Quellcode:
var
tmpHTTP: TIdHTTP;
begin
tmpHTTP := TidHTTP.Crate;
tmpHTTP := AnderesIdHTTP;
tmpHTTP.Free;
end;
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.

gsh 27. Jun 2006 13:46

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?

Xtra 27. Jun 2006 13:54

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.

Sascha L 28. Jun 2006 07:54

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 14:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz