AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Zeitpunkt der Übernahme von Objektinspektor-Einstellungen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitpunkt der Übernahme von Objektinspektor-Einstellungen

Offene Frage von "skyobserver"
Ein Thema von skyobserver · begonnen am 13. Jun 2007 · letzter Beitrag vom 22. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Zeitpunkt der Übernahme von Objektinspektor-Einstellungen

  Alt 13. Jun 2007, 13:13
Hallo,

weiß Jemand zu welchem Zeitpunkt die Einstellungen im Objektinspektor
auf die betreffende Komponente übertragen werden?


Ich habe ein eigenes Form von TForm abgeleitet. Dieses soll, wenn gewünscht,
am besten vor dem ersten Form-Show seine Position aus der Registry laden.
Das Problem ist die published Property "LoadPosition":

Delphi-Quellcode:
constructor Create(Owner: TComponent); override;
begin
  inherited Create(Owner);

  LoadPosition := True;
end;
Die Default-Werte müssen ja nach dem "inherited Create..." gesetzt
werden, damit sie im Objektinspektor den richtigen Standard-Wert haben.

Ich habe nun die Prozedur "DoShow" von TCustomForm überschrieben und
nach dem "inherited DoShow;" abgefragt ob "LoadPosition" True oder False ist,
aber egal was im Objektinspektor eingestellt ist: Ich bekomme ich immer den
Wert aus meinem Constructor!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 17:47
Zuerst wird der Konstruktor abgearbeitet.
Dann lädt die VCL die Properties aus der DFM-Resource.
Danach wird die Procedure Loaded aufgerufen.
Man kann diese Procedure überschreiben, um so direkt nach dem Laden der DFM einzugreifen.

In deinem Fall wird es wohl so sein, dass das Property LoadPosition nicht in der DFM steckt und deshalb auch nicht geladen wird.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 18:26
Jetzt habe ich interessanter Weise immer False (egal was im Objektinspektor eingestellt ist)...


So hatte ich mir das ganze vorgestellt:

Delphi-Quellcode:
unit xForm;


interface


uses
  Forms, Classes;


type
  TxForm = class(TForm)
  private
    FSavePosition: Boolean;
    FSaveSize: Boolean;
    FSaveState: Boolean;
    FLoadPosition: Boolean;
    FLoadSize: Boolean;
    FLoadState: Boolean;
  protected
    procedure Loaded; override;
    procedure DoClose(var Action: TCloseAction); override;
  public
    constructor Create(Owner: TComponent); override;
    destructor Destroy; override;
  published
    property SavePosition: Boolean read FSavePosition write FSavePosition default True;
    property SaveSize: Boolean read FSaveSize write FSaveSize default True;
    property SaveState: Boolean read FSaveState write FSaveState default True;
    property LoadPosition: Boolean read FLoadPosition write FLoadPosition default True;
    property LoadSize: Boolean read FLoadSize write FLoadSize default True;
    property LoadState: Boolean read FLoadState write FLoadState default True;
  end;


implementation


uses
  SysUtils;


constructor TxForm.Create(Owner: TComponent);
begin
  inherited Create(Owner);

  FSavePosition := True; //Hier die Default-Werte setzen
  FSaveSize := True; //für den Fall das in der DFM
  FSaveState := True; //noch keine Werte hinterlegt sind
  FLoadPosition := True; //Diese Werte werden dann später
  FLoadSize := True; //durch die DFM Werte überschrieben
  FLoadState := True;
end;


destructor TxForm.Destroy;
begin
  inherited Destroy;
end;


procedure TxForm.Loaded;
begin
  inherited Loaded;
  
// xLoadWindow(Self, FLoadPosition, FLoadSize, FLoadState); //Hier sollen bei Bedarf die Eigenschaften geladen werden
end;


procedure TxForm.DoClose(var Action: TCloseAction);
begin
  inherited DoClose(Action);

// if (Application.MainForm = Self) or ((Action <> caHide) and (Action <> caMinimize)) then //Hier sollen bei Bedarf die
// xSaveWindow(Self, FSavePosition, FSaveSize, FSaveState); //Eigenschaften gespeichert werden
end;


end.

Die Objektinspektor-Einstellungen werden auf jeden Fall in der DFM gespeichert, denn wenn
ich das Projekt schließe und wieder lade werden meine Einstellungen wieder hergestellt.

Bei xLoadWindow in "DoShow" habe ich nur TRUE (meine Default-Werte) aber noch nicht die Werte aus der DFM.

Bei xLoadWindow in "Loaded" habe ich nur FALSE (anscheinen noch nicht einmal die Default Werte)

"Loaded" kehrt wohl in meinen "inherited Create" noch vor den Defaults zurück...
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 18:43
Du möchtest also ein Formular, dass seine Position & State speichert und beim Anzeigen wieder holt.
Da gibt es aber bessere Ansätze als das Ableiten von TForm.
Ableiten kann man nur einmal. Wenn der Job aber an eine Komponente delegiert wird, dann kann
man die Funktionalität auch auf Formularen nützen, die schon von irgend einer Masterklasse abgeleitet wurden.

In der RX-Lib gibt es die Komponenten TFormPlacement & TFormStorage.
Diese gibt es (verbessert) auch in der JVCL 3.
Vorallem können die Komponenten zusätzlich jedes beliebige Property (z.B. Edit1.Text) zusätzlich in der Registry oder INI-Datei speichern.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 18:59
An die Möglichkeit einer Komponente hatte ich auch schon gedacht
und die Idee für so etwas hatte ganz bestimmt auch schon jemand...

Allerdings versuche ich, wenn möglich, ausschließlich eigenen Code zu verwenden.
Ich möchte dabei ja auch was lernen (empfinde da so etwas wie sportlichen Ehrgeiz
das selbst hinzubekommen...und wenn dann immer noch lieber mit Hilfe als Kopieren...).

Außerdem finde ich es schöner wenn die Properties zum Speichern und Laden der
Fenstereigenschaften auch unter den Properties des Fensters und nicht unter
denen einer darauf befindlichen Komponente sind.

Das xForm kommt dann in die Objektablage und wird der Standard für neue Forms bzw. Projekte.


Davon abgesehen...das muß beim Ableiten doch irgendwie hinzukriegen sein!?!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 19:22
Zitat von skyobserver:
...das muß beim Ableiten doch irgendwie hinzukriegen sein!?!
Versuch mal:
Delphi-Quellcode:
initialization
   // die Klasse muss registriert werden, sonst weiss die VCL nicht,
   // dass Sie die zusätzlichen Published Properties streamen soll
   RegisterClass(TXForm);
end.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 13. Jun 2007, 19:43
Hab ich schon gemacht...meine Form ist bereits in der Objektablage,
alle Properties sind im Objektinspektor...

Alles super - Mir fehlt nur die Stelle wo ich den Load meiner gespeicherten
Einstellungen ausführen muß...


Hier der Code aus meinem Package...

Delphi-Quellcode:
procedure Register;
begin
  RegisterCustomModule(TxForm, TCustomModule);
end;
  Mit Zitat antworten Zitat
Benutzerbild von skyobserver
skyobserver

Registriert seit: 18. Mai 2005
Ort: Ense
114 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#8

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 22. Jun 2007, 16:58
Hab' noch mal herumprobiert und festgestellt das die Einstellungen
zur Designzeit im Objektinspektor gespeichert und geladen werden.

Beim starten des Programms werden die Einstellungen aber nicht geladen!

Hat auch nicht geholfen:
Delphi-Quellcode:
initialization
   RegisterClass(TXForm);
end.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 22. Jun 2007, 17:03
wenn du auf dein Form einen Button packst und beim klick darauf die Eigenschaft liest, ist sie dann gesetzt?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Zeitpunkt der Übernahme von Objektinspektor-Einstellunge

  Alt 22. Jun 2007, 17:13
In der DFM noch "object" anstatt "inherited" stehen?
  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 22:37 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