Hallo,
Ich habe eine TComboBox, gefüllt mit allen möglichen Eigenschaften. Zur Laufzeit benötige ich eine Kopie dieser Komponente mit allen Eigenschaften usw.
Also mit .Create(Self) kann ich eine neue auf machen, aber wie bekommen ich da die vielen Eigenschaften alle einfach rein?
Gibt es sowas wie ".CreateCopy(TComponent)"?
Hintergrund: Ich nutze die TDBGrid und möchte im Grid die gleiche TComboBox zeigen, wie schon an einer anderen Stelle im Programm gezeigt wird. Wenn ich jetzt diese anhänge, dann ist sie im Grind und nicht mehr an dem Platz wo sie war, also brauche ich eine 1:1 Kopie dieser TComboBox. Da ich davon viele habe wollte ich eine einfache Methode nutzen.
Vielen Dank für eure Hilfe.
Komponente zur Laufzeit kopieren
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Komponente zur Laufzeit kopieren
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Komponente zur Laufzeit kopieren
Es gibt ein Beispiel zu Komponenten Streaming in
/examples/componentstreaming
/examples/componentstreaming
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Komponente zur Laufzeit kopieren
Vielen Dank für den Tipp. Ich hab folgendes Programmiert:
Nachteil: Es werden die Events nicht mit kopiert. Also es funktioniert nicht ganz richtig.
Gibt es noch eine andere Lösung?
(Assign und AssignTo funtkionieren nicht)
Code: Alles auswählen
grdEditor := Nil; // Dummy-Komponente
AStream := TMemoryStream.Create;
try
WriteComponentAsBinaryToStream(AStream, cboPParDefDatentyp); // Quell Komponente
AStream.Position := 0;
ReadComponentFromBinaryStream(AStream, grdEditor, @OnFindClass, grdPParamDefs); // Ziel, neue Komponente
finally
AStream.Free;
end;
grdEditor.BoundsRect := grdRect; // Zuweisen Position im Grid

Gibt es noch eine andere Lösung?
(Assign und AssignTo funtkionieren nicht)
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Komponente zur Laufzeit kopieren
Naja, die paar Events könntest du auch von Hand einhängen.MmVisual hat geschrieben: Nachteil: Es werden die Events nicht mit kopiert. Also es funktioniert nicht ganz richtig.![]()
Gibt es noch eine andere Lösung?
Aber wenn du's um's verrecken "akademisch" haben willst, kann man das mit RTTI schon lösen.
Hier gibt's ein zip mit einer RTTIUnit drin und einer Funktion CopyObject damit geht's. (uses typinfo)
http://www.blong.com/Conferences/BorCon ... tToAnother" onclick="window.open(this.href);return false;
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Komponente zur Laufzeit kopieren
Toller Tipp!
Es Funktioniert aber nur zum Teil. Also das Element ist da und alles drin, aber der ItemIndex ist -1. Liegt wohl daran dass erst die Eigenschaften kopiert werden (dadurch wird ItemIndex dank leerer Item-Liste auf -1 gesetzt) und dann erst die Itemliste.
Ich werde es wohl doch manuell machen müssen...
Es Funktioniert aber nur zum Teil. Also das Element ist da und alles drin, aber der ItemIndex ist -1. Liegt wohl daran dass erst die Eigenschaften kopiert werden (dadurch wird ItemIndex dank leerer Item-Liste auf -1 gesetzt) und dann erst die Itemliste.
Ich werde es wohl doch manuell machen müssen...
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Komponente zur Laufzeit kopieren
Kannst ja diese Methode trotzdem benutzen und dann einfach den Itemindex manuell kopieren.MmVisual hat geschrieben: Ich werde es wohl doch manuell machen müssen...