AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponentenerstellung: Prozedur wenn Programm gestartet wird
Thema durchsuchen
Ansicht
Themen-Optionen

Komponentenerstellung: Prozedur wenn Programm gestartet wird

Ein Thema von Martin K · begonnen am 7. Jun 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Komponentenerstellung: Prozedur wenn Programm gestartet wird

  Alt 7. Jun 2006, 17:29
Hi,

hab mir eine Komponente abgeleitet und würde dort gerne Befehle ausführen, sobald das Programm compiliert wird.
Wollte es erst so machen, dass ich im Constructor abfrage if not (csDesigning in ComponentState), aber anscheinend wird der Contructor nur zur Designzeit ausgeführt.

Hat jemand eine Idee?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:02
Wass willst du bei der Compilierung ausführen?
Zitat:
aber anscheinend wird der Contructor nur zur Designzeit ausgeführt.
Er wird definitiv zur Laufzeit ausgeführt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:14
Zitat von mkinzler:
Wass willst du bei der Compilierung ausführen?
Zitat:
aber anscheinend wird der Contructor nur zur Designzeit ausgeführt.
Er wird definitiv zur Laufzeit ausgeführt.
Hm, also ich verstehe grad meinen eigenen Code nicht.

Im Constructor lege ich doch verschiedene Properties fest (z.B. Caption := 'Test').
Wenn ich dann aber die Caption im OI (also zur Designzeit) ändere, so steht dann bei compilierten Programm (also zur Laufzeit) die geänderte Caption da.
Also wird doch beim Compilieren die Caption nicht in 'Test' geändert, wie es im Constructor steht.
Folglich wird beim Compilieren der Constructor nicht durchlaufen oder sehe ich da jetzt was komplett falsch ???
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
shmia

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

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:20
Zitat von Martin K:
Folglich wird beim Compilieren der Constructor nicht durchlaufen oder sehe ich da jetzt was komplett falsch ???
Der Constructor wird ausgeführt!
Danach werden die Properties, die in der DFM-Datei gespeichert wurden den Komponenten zugewiesen.
Danach wird die virtuelle Prozedur Loaded ausgeführt. Du kannst diese überladen, wenn du direkt nachdem die Komponente seine Properties erhalten hat noch etwas tun möchtest.
Andreas
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:21
Zitat von Martin K:
Folglich wird beim Compilieren der Constructor nicht durchlaufen oder sehe ich da jetzt was komplett falsch ???
Tust du. Der Constructor wird auf jeden Fall ausgeführt, aber alle (oder zumindest viele) Eigenschaften der Komponente, die man im OI ändern kann, werden in die dfm-Datei und damit ins Programm geschrieben. Zur Laufzeit wird deine Komponente also ganz normal erstellt, nur bügelt der Form-Loader nochmal gemütlich drüber, also siehst du zB von der Caption 'Test' letzten endes nix mehr

Tu doch mal ein ShowMessage in den Constructor, dann siehst dus auch
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:32
Danke , jetzt hab ich das Prinzip verstanden!
Also erst Constructor durchlaufen, dann Properties aus dfm laden!

Mein Problem liegt darin, dass ich im Constructor zunächst die Property auf den Default-Wert setze.
Danach frage ich den Wert ab (auch noch im Constructor) und es kommt natürlich wieder de Default-Wert raus, obwhol er im OI geändert wurde.
Wie kann ich dann diesen geänderten Wert (der ja in der dfm steht) beim Compilieren erhalten,
das müsste dann also mit Loaded gehen?
Wie und wo muss ich denn Loaded deklarieren?

//Edit:
Oder kann ich irgendwie anders, die Werte aus der dfm im Constructor erhalten - oder ist das überhaupt nicht möglich?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
shmia

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

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:39
Zitat von Martin K:
Wie und wo muss ich denn Loaded deklarieren?
Delphi-Quellcode:
TMeineKompi = class(TComponent)
...
protected
   procedure Loaded;overload;
end;
....
procedure TMeineKompi.Loaded;
begin
   // wenn das Property verändert wurde, dann irgendwas nettes tun
   if Caption<>'default captionthen
      Caption := '***'+Caption+'***';
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:50
Zitat von shmia:
Delphi-Quellcode:
TMeineKompi = class(TComponent)
...
protected
   procedure Loaded;overload;
end;
....
procedure TMeineKompi.Loaded;
begin
   // wenn das Property verändert wurde, dann irgendwas nettes tun
   if Caption<>'default captionthen
      Caption := '***'+Caption+'***';
end;
Sicher, dass es nicht override heißen muss?
Zitat:
[Warnung] Methode 'Loaded' verbirgt virtuelle Methode vom Basistyp 'TCustomLabel'
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:51
..;overload;... Da gehört eher ein override; hin
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Komponentenerstellung: Prozedur wenn Programm gestartet

  Alt 7. Jun 2006, 18:55
Danke!

Jetzt klappt's!!!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  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 14:35 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