AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Ableitung von TPanel - wo/wann ist ClientWidth bekannt?
Thema durchsuchen
Ansicht
Themen-Optionen

Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

Ein Thema von wicht · begonnen am 6. Mär 2010 · letzter Beitrag vom 6. Mär 2010
Antwort Antwort
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#1

Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 22:43
Hallo Forum.

Kurze Frage. Ich habe eine Ableitung von TPanel gebaut. Im Konstruktor werden verschiedene Controls erzeugt, die in diesem Panel sichtbar sein sollen. Genaugenommen links eine Ableitung von TVirtualStringTree und rechts eine Ableitung von TPanel. Das funktioniert auch alles gut - nur möchte ich, wenn die Form da ist, die Child-Controls des Panels anordnen - zum Beispiel für den Tree die Breite setzen, weil er auf Align=alLeft ist - das Panel des Panels hat alClient.

Die Breite für den Tree kann ich aber erst setzen, wenn das Fenster da ist und ClientWidth bekannt ist. Wenn ich in besagtem Panel auf ClientWidth zugreife (im Konstruktor) bekomme ich immer eine Exception. Das ist vielleicht auch verständlich, nur was muss ich überschreiben, was zu dem Zeitpunkt ausgeführt wird, wo ClientWidth bekannt ist? Ich könnte das im Resize() machen, aber ich will es ja nur einmal aufrufen. Klar könnte ich mir noch einen Merker setzen, so dass mein Code im Resize nur einmal aufgerufen wird, um die Controls beim Anzeigen der Form auszurichten, aber gibt es da auch eine schönere Methode?

Vielen Dank im Vorraus und noch einen schönen Samstag Abend ..
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 22:51
Du könntest versuchen, Loaded zu überschreiben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#3

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:03
Danke für die Antwort!
Ich habe es direkt probiert, jedoch wird Loaded nicht aufgerufen..
Wenn ich mir die VCL-Sourcen so anschaue, sieht es für mich aus, als würde Loaded im Endeffekt nur durch InitInheritedComponent() aufgerufen werden, welches nur von TDataModule verwendet wird?

Hat eventuell jemand noch eine Idee?
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:07
Sry, aber das mag ich nicht glauben (zumal ich das selbst schon ein paar mal so gemacht habe): TComponent.Loaded. Möglicherweise ist das nicht der richtige Zeitpunkt, aber aufgerufen wird es bestimmt.

[edit] Ich revidiere meine Aussage, das gilt anscheinend nicht für Komponenten, die zur Runtime erzeugt werden. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:13
Es deutet vieles darauf hin, dass du Recht hast. Ich glaube, ich habe ein anderes Problem...

Hier mein kurzer Test-Quelltext, in dem ShowMessage() nicht aufgerufen wird:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TMyPanel = class(TPanel)
  protected
    procedure Loaded; override;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  P: TMyPanel;
begin
  P := TMyPanel.Create(Self);
  P.Parent := Self;
  P.Left := 10;
  P.Top := 10;
  P.Width := 100;
  P.Top := 100;
  P.Caption := 'Mein Panel!';
  P.Show;
end;

{ TMyPanel }

procedure TMyPanel.Loaded;
begin
  inherited;
  ShowMessage('X');
end;

end.
Mache ich irgendetwas anderes falsch? Ich habe das Gefühl, dass die Lösung sehr einfach ist, und mir das am Ende fast peinlich sein könnte.. ..
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:17
Siehe mein Edit oben . Dann fällt mir auf die Schnelle nur eine schmutzige Lösung ein, nämlich ein privates Flag, das im Konstruktor auf true gesetzt, im OnResize dann ausgewertet und auf false gestellt wird. Nicht gerade sonderlich elegant, sollte aber funktionieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#7

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:21
Okay, vielen Dank
Das Problem hatte ich schon öfters, und habe es dann immer "dreckig" gelöst, wie du es jetzt auch vorgeschlagen hast, aber heute Abend hat es mich stärker genervt als sonst und ich musste nachfragen... Naja, wenn die dreckige Lösung die einzige sein sollte.. kann sie ja nicht so dreckig sein

Schönes Wochenende noch
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Ableitung von TPanel - wo/wann ist ClientWidth bekannt?

  Alt 6. Mär 2010, 23:23
Dir auch (kann ja nicht immer alles auf Anhieb klappen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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 06:29 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