![]() |
Re: Objekt kopieren
Also wenn ich ein Bild habe, das ich irgendwie modifiziere, dann mach ich das so, dass ich einen Buffer habe (TBitmap) wo das Original noch drauf ist. Weiß nicht ob das in dein Programm reinpasst...
|
Re: Objekt kopieren
Zitat:
Beim Runterskalieren gehen Bildinformationen verloren - die beim Hochskalieren nicht wieder zurückgewonnen werden können. Grüße Klaus |
Re: Objekt kopieren
Hallo probier das doch mal mit Image1.Stretch:=True; aus. vom Typ TImage.
Vorher musst du halt noch die Breite und Höhe des Images festlegen. Image1.Width=300; Image1.Height=300; Als Beispiel |
Re: Objekt kopieren
Zitat:
|
Re: Objekt kopieren
Das Kopieren von Objekten findet über die Methode Assign statt!
Dazu muss das Zielobjekt von TPersistent abgeleitet sein. Die Assign-Methode hat immer folgenden Aufbau:
Delphi-Quellcode:
Der Copy-Constructor ist der schnelle Ersatz für folgenden Code:
procedure TVerpackung.Assign(Source: TPersistent);
begin if Source is TVerpackung then begin FIdVerp := TVerpackung(Source).IdVerp; FBezeichnung := TVerpackung(Source).Bezeichnung; FVLength := TVerpackung(Source).VLength; FVHeight := TVerpackung(Source).VHeight; FVWidth := TVerpackung(Source).VWidth; FTara := TVerpackung(Source).Tara; FPicture.Assign(Source); // Unterobjekt kopieren ... end else // Ganz wichtig: // wenn ich die Klasse von "Source" nicht kenne, // dann immer inherited aufrufen // Könnte sein, dass ein Parentklasse die Zuweisung vornehmen kann // falls nicht, hat die VCL noch einen Supertrick in der Hinterhand // es wird die Methode AssignTo aufgerufen // falls dies auch fehlschlägt, gibt's ein Exception inherited; end;
Delphi-Quellcode:
Der Copy-Constructor macht dann Sinn, wenn in .Create viele Properties zugewiesen werden,
objA := TEinObjekt.Create;
objA.Assign(objB); nur um dann in .Assign überbügelt zu werden. Ganz allgemein ist aber die Assign-Methode wertvoller, da mit ihr auch Objekte unterschiedlicher Klassen kopiert werden können. Wenn ein Objekt UnterObjekte hat, dann gibt es zwei Varianten: 1.) nur Hauptobjekt wird kopiert. Bei den Unterobjekten werden nur Referenzen kopiert (2 Zeiger auf's gleiche Objekt) 2.) "Deep-Copy": auch die Unterobjekte werden sauber über Assign kopiert. Alle Objekte sind nun völlig unabhängig voneinander.
Delphi-Quellcode:
Es wäre nun zu prüfen, ob TObjectList.Assign einen Depp-Copy ausführt.
constructor TPageCollection.Create(pc: TPageCollection);
begin inherited Create; FInnerList := TList.Create; // die TList-Klasse weiss nicht, dass seine Items Objekte sind // also wird hier kein "Deep-Copy" ausgeführt FInnerList.Assign(pc.FInnerList); |
Re: Objekt kopieren
Hi shmia, siehe meinen Beitrag #4 (1. Zeile). Aber Du hast es wunderbar erklärt :thumb:
|
Re: Objekt kopieren
Zitat:
Cu, Udontknow |
Re: Objekt kopieren
Ich brauche jetzt doch eine Kopie der Objekte in der Collection. Deswegen habe ich alzaimars Clone-Methode versicht zu implementieren:
Zitat:
|
Re: Objekt kopieren
Ist Assign (wie zuvor von shmia geschrieben) nicht eine notwendige Funktion für jedes TCollectionItem (was ja imho von TPersist kommt)?
Sprich:
Delphi-Quellcode:
Vorausgesetzt Dein Assign dort funktioniert vernünftig natürlich ;)
For i := 0 to Pred(Count)
do Result.Add.Assign(Items[i]); |
Re: Objekt kopieren
So wie ich ihn verstanden habe sollte man seine Methode benutzen können um Objekte vom Typ TObject kopieren zu können.
Was meinst du mit: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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