AGB  ·  Datenschutz  ·  Impressum  







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

Komponente verschiebt sich zur Laufzeit

Ein Thema von Neutral General · begonnen am 8. Jan 2013 · letzter Beitrag vom 8. Jan 2013
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Komponente verschiebt sich zur Laufzeit

  Alt 8. Jan 2013, 12:21
Hallo,

Im Anhang ist mal ein Bild von einem Formular mit einer eigenen Komponente auf einem Panel (Panel ist mit Color=clCream hervorgehoben).

Zur Laufzeit verschiebt sich die Komponente allerdings, bzw. sie scheint den Parent zu ändern (vom Panel auf die Form).
Die Top und Left-Werte bleiben nämlich erhalten. Interessanterweise bleibt auch das Parent erhalten.
Im constructor habe ich als Parent für die eingebetteten Controls entweder Self, oder eines der eingebetteten Controls genommen.

Hat jemand eine Idee was da passiert?

Ich könnte etwas Quelltext liefern aber das ist nur ein Constructor in dem jede Menge Controls erzeugt werden.
Miniaturansicht angehängter Grafiken
parent.png  
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Komponente verschiebt sich zur Laufzeit

  Alt 8. Jan 2013, 12:48
Nur ein Verdacht, im Konstruktor Code in der Art

Parent := TWinControl(Owner );
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Komponente verschiebt sich zur Laufzeit

  Alt 8. Jan 2013, 12:58
Nein das Parent wird im constructor nicht gesetzt.
Hab mal debuggt und das Parent wird auch nach dem constructor nochmal beim Lesen aus der DFM auf das Panel1 gesetzt.

Wenn ich im Nachhinein (per Button) das Parent auf das Panel ändere, dann siehts wieder richtig aus.

Delphi-Quellcode:
constructor THTMLEditor.Create(AOwner: TComponent);

  function CreateToolPanel(AParent: TWinControl; AWidth: Integer): TPanel;
  begin
    Result := TPanel.Create(Self);
    Result.Parent := AParent;
    Result.Align := alLeft;
    Result.Left := MaxInt;
    Result.Width := AWidth;
    Result.BevelOuter := bvNone;
    Result.Caption := '';
    Result.BevelKind := bkFlat;
    Result.BevelEdges := [beRight];
  end;

begin
  inherited Create(AOwner);

  DoubleBuffered := true;

  FImageOptions := THTMLImageOptions.Create(Self); // = class(TPersistent)

  FToolbarVisible := true;
  FToolbarControls := ToolbarAllControls;

  Width := 300;
  Height := 200;

  // ... Panels und Controls werden erstellt. (Panels per CreateToolPanel)
  // Parent wird nirgendwo auf AOwner gesetzt, maximal auf Self.
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Komponente verschiebt sich zur Laufzeit

  Alt 8. Jan 2013, 13:23
Wenn deine Komponente eigene Unter-Komponenten erstellt und auch wieder freigibt, dann solltest du diese per SetSubComponent(true) auch als solche kennzeichnen. Andernfalls kommt eventuell das Streaming aus der DFM durcheinander.

Man kann sich das in der VCL bei dem TLabeledEdit ansehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Komponente verschiebt sich zur Laufzeit

  Alt 8. Jan 2013, 14:12
@Uwe
Wenn die SubControls alle auf Self oder anderen SubControls platziert werden glaube ich das eher nicht. Die Eigenschaften der SubControls werden ohne SetSubComponent nicht in der dfm gespeichert. Aber das ist ja vorliegend scheinbar auch nicht notwendig.

Es wäre sicher mal sinnvoll, den Contructor zu debugen und genau zu schauen, was da wirklich passiert. Ist die Komponente auch in der aktuellen Version in der IDE installiert?
Es könnte sein, dass eine alte (funktionsfähige) Version installiert ist und zur Designtime erstellt wird und zur Laufzeit wird eine fehlerhafte Version (mit falschen Parents) erzeugt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort


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:08 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