![]() |
RemoveComponent/InsertComponent Fehler
Hi Leute,
folgende Situation: Ich habe eine eigenen Komponente (TCustomPanel) in einer ScrollBox platziert (Designzeit). Nun möchte ich zur Laufzeit diese in eine andere Scrollbox verschieben. Dazu hab ich der ScrollBox in die die Kompo soll ein Popup-Menü verpasst. Meine Kompo besitzt eine Eigenschaft Selected. Ist dies True (klappt), so möchte ich diese in die leere ScrollBox über dessen Popup verschieben. Den Code des Menü-Eintrages hier:
Delphi-Quellcode:
In der alten ScrollBox verschwindet die Kompo, taucht aber in der neuen nicht auf. Danach geht das Prog mit Exception Lesen von null an einer völlig anderen Stelle ins aus. Über die beiden eingebundenen MsgDlg's prüfe ich hier schon, ob die richtige Kompo gefunden wurde und die Zielkompo stimmt. Alles i.O.
procedure TForm1.ausgewhltesElementhierherverschieben1Click(
Sender: TObject); var Compo : TBaseSeyControl; begin // selektierte Kompo suchen Compo := GetSelectedSeyControl(Application.MainForm); IF Compo = nil then begin MessageDlg('Keine selektierte Komponente gefunden!', mtInformation, [mbOK], 0); Exit; end else begin // hier mal guggen MessageDlg(Format('Komponente %s gefunden', [Compo.Name]), mtWarning, [mbOK], 0); MessageDlg(Format('new Parent: %s', [PopupMenu2.PopupComponent.Name]), mtWarning, [mbOK], 0); Compo.Owner.RemoveComponent(Compo); PopupMenu2.PopupComponent.InsertComponent(Compo); Compo.Parent := TWinControl(PopupMenu2.PopupComponent); end; end; Der abgebildete Code wird auch ohne Fehler durchlaufen (Test mit Debugger). Was mach ich falsch? Gruß oki |
Re: RemoveComponent/InsertComponent Fehler
also normalerweise sollte ein
Delphi-Quellcode:
reichen, das Remove und Insert der Componenten sollte durch die VCL automatisch germacht werden, vielleicht ist die VCL böse, wenn man da manuell reinpfuscht?
Compo.Parent := TWinControl(PopupMenu2.PopupComponent);
|
Re: RemoveComponent/InsertComponent Fehler
Also böse ist sie bei mir sicher, sonnst würde es funzen. Die Idee mit der einfachen Zuweisung des Parents hatte ich zuerst auch. Hat aber nicht geklappt.
Es tut sich rein gar nichts!! Gruß oki |
Re: RemoveComponent/InsertComponent Fehler
Hallo,
statt RemoveComponent() und InsertComponent() sind RemoveControl() und InsertControl() nötig. Eine kleine Verwechslung mit ungeahnten Folgen. Die einfache Zuweisung eines neuen ParentControl funktioniert nur dann, wenn die Methode SetParent() entsprechend aufgebaut ist. Grüße vom marabu |
Re: RemoveComponent/InsertComponent Fehler
hmmmm, also bei mir ist in der vcl SetParent bereits beim TControl definiert, müsste dann das zuweisen des Parents nicht automatisch bei allen abgeleiteten objekten auch funktionieren?
|
Re: RemoveComponent/InsertComponent Fehler
Ja, aber ich hatte nicht in die Quellen geschaut und mich deshalb etwas vorsichtiger ausgedrückt - zumal oki ja auch behauptet, dass es nicht funktionierte.
Freundliche Grüße |
Re: RemoveComponent/InsertComponent Fehler
Hi marabu,
ich hab's mit RemoveControl und InsertControl probiert. Gleicher Fehler wie oben beschrieben.
Delphi-Quellcode:
Gruß oki
TWinControl(Compo.Owner).RemoveControl(Compo);
TWinControl(PopupMenu2.PopupComponent).InsertControl(Compo); Compo.Parent := TWinControl(PopupMenu2.PopupComponent); |
Re: RemoveComponent/InsertComponent Fehler
was willst du mit Removecontrol etc. überhaupt bewirken? Wenn du einfach nur den Parent ändern willst genügt es das Parent-Property einfach neu zu setzen.
|
Re: RemoveComponent/InsertComponent Fehler
Zitat:
Gruß oki |
Re: RemoveComponent/InsertComponent Fehler
dann machst du irgendwas falsch. Wenn du das machst:
Delphi-Quellcode:
wandert das Control von einer Scrollbox zur anderen. Wenn dem nicht so ist geht bei dir etwas gewaltig schief. Kannst du das Projekt eventuell mal posten?
if Control.Parent = ScrollBox1 then
Control.Parent := ScrollBox2 else Control.Parent := ScrollBox1; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:51 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