AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RemoveComponent/InsertComponent Fehler

Ein Thema von oki · begonnen am 28. Mär 2007 · letzter Beitrag vom 10. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#1

RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 17:29
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:
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;
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.
Der abgebildete Code wird auch ohne Fehler durchlaufen (Test mit Debugger).

Was mach ich falsch?

Gruß oki
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#2

Re: RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 18:30
also normalerweise sollte ein
    Compo.Parent := TWinControl(PopupMenu2.PopupComponent); 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?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 18:41
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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 18:47
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
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#5

Re: RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 19:01
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?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: RemoveComponent/InsertComponent Fehler

  Alt 28. Mär 2007, 19:22
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
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: RemoveComponent/InsertComponent Fehler

  Alt 29. Mär 2007, 17:17
Hi marabu,

ich hab's mit RemoveControl und InsertControl probiert. Gleicher Fehler wie oben beschrieben.
Delphi-Quellcode:
    TWinControl(Compo.Owner).RemoveControl(Compo);
    TWinControl(PopupMenu2.PopupComponent).InsertControl(Compo);
    Compo.Parent := TWinControl(PopupMenu2.PopupComponent);
Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: RemoveComponent/InsertComponent Fehler

  Alt 29. Mär 2007, 17:41
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: RemoveComponent/InsertComponent Fehler

  Alt 29. Mär 2007, 17:45
Zitat von SirThornberry:
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.
Genau das hab ich zuerst getan und es passiert nichts. Die Compo bleibt in der alten ScrollBox; und taucht in der neuen nicht auf.

Gruß oki
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: RemoveComponent/InsertComponent Fehler

  Alt 29. Mär 2007, 17:49
dann machst du irgendwas falsch. Wenn du das machst:
Delphi-Quellcode:
if Control.Parent = ScrollBox1 then
  Control.Parent := ScrollBox2
else
  Control.Parent := ScrollBox1;
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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