Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi prozeduraufruf bei programmstart? (https://www.delphipraxis.net/29270-prozeduraufruf-bei-programmstart.html)

Nothine 6. Sep 2004 21:08


prozeduraufruf bei programmstart?
 
moin ^^

ich hab folgendes problem: Mit einer Komponente biege ich den WndProc zeiger des Hauptformulars um. Da dies aber bei mehrmaligem ändern (innerhalb der IDE) zum abschmieren von delphi führt, wollte ich fragen wie ich in die komponente(!) implementieren kann, das sie erst bei programmstart die erforderliche "umbiegung" vornimmt.

hoffe mir kann jemand helfen :?

SirThornberry 6. Sep 2004 21:10

Re: prozeduraufruf bei programmstart?
 
ganz einfach. In der Componente folgendes schreiben
Delphi-Quellcode:
if not(csDesigning in Componentstate) then
begin
  //hier das machen was passieren soll wenn die Komponenten nicht im Designstate ist
end;

alcaeus 6. Sep 2004 21:11

Re: prozeduraufruf bei programmstart?
 
Hi Nothine!

Umbiegen des WndProc-Zeigers? Naja...über Sinn und Unsinn fangen wir hier nicht an zu sprechen.
Versuch einfach, die Komponente dynamisch im OnCreate des Forms zu erzeugen. Somit besteht sie zur Entwicklungszeit noch nicht und dein Problem ist gelöst.

Greetz
alcaeus

Nothine 6. Sep 2004 21:15

Re: prozeduraufruf bei programmstart?
 
sinn und unsinn dieses umbiegens sind leicht zu erklären falls es jemanden interessiert.

if not(csDesigning in Componentstate) then
is mir bekannt, nur mein problem besteht einfach darin... wo soll ich danach prüfen??? der bei mehrfach-aufruf zum absturz führende code ist in einer set-methode einer property untergebracht, und ich kann den nutzer der komponente ja schlecht zwingen jedesmal wenn er sie benutzt im OnCreate den wert noch ma zu zuweisen den er ja eigentlich schon im OI eingestellt hat...

naja folgendes, es soll halt ne komponente sein die man auch zur designzeit aufs formular ziehen kann... deswegen dachte ich gibts kA vielleicht ne globale variable oder ähnliches die mir sagt das das programm gestartet wurde... (obwohl ich dann immer noch nich so direkt weiß wo ich die auswerten sollte...)

SirThornberry 6. Sep 2004 21:21

Re: prozeduraufruf bei programmstart?
 
wo ist dann das Problem mit dem csDesigning?
Delphi-Quellcode:
type
  TYourClass = class(TComponent)
  private
    fYourBoolean: Boolean;
    fSetMethode(AValue: Boolean);
  public
    property YourProperty: Boolean read fYourBoolean write fSetMethode;
  end;

procedure TYourClass.fSetMethode(AValue: Boolean);
begin
  if AValue <> fYourBoolean then
  begin
    fYourBoolean := AValue;
    if not(csDesigning in ComponentState) then
    begin
      //Do something with your Value and the WindowProc
    end;
  end;
end;
Also einfach deinen Status in einer Variablen speichern und dann zur Runtime erst zusätzlich darauf reagieren.

Du solltest zusätzlich noch dafür sorgen das deine Componente nur einmal erstellt werden kann damit nicht alles durcheinander kommt wenn diese dann in falscher reihenfolge wieder zerstört werden.

Nothine 6. Sep 2004 21:26

Re: prozeduraufruf bei programmstart?
 
Zitat:

Zitat von SirThornBerry
Also einfach deinen Status in einer Variablen speichern und dann zur Runtime erst zusätzlich darauf reagieren

das is ja mein problem, wie reagier ich zur runtime erst drauf? :wall: (es wird natürlich in eine variable gespeichert, aber ich muss halt noch letzte schritte bei start des programms ausführen, die nicht früher passieren dürfen und die ich gerne automatisieren würde... is das denn so unmöglich? :?

Edit:
Zitat:

Zitat von SirThornBerry
Du solltest zusätzlich noch dafür sorgen das deine Componente nur einmal erstellt werden kann damit nicht alles durcheinander kommt wenn diese dann in falscher reihenfolge wieder zerstört werden.

das ist nicht das problem, die komponente speichert den alten Zustand von WindowProc, und wer verändert schon (wenn ich das endlich so hinbekommen würde wie ich will) zur runtime WndProc ?

SirThornberry 6. Sep 2004 21:28

Re: prozeduraufruf bei programmstart?
 
Hmm, ich glaub ich verstehe dich nicht so recht. Durch das abprüfen des Componentstate stellst du doch sicher das alles erst zur runtime passiert. :gruebel: Vielleicht hilfts ja wenn du bissl mehr details preis gibst denn die eigentliche frage ist ja schon beantwortet (wie man sicherstellen kann das source einer componente nicht zur designtime ausgeführt wird), und wenn das nicht wirklich die frage war musst du wohl noch etwas prezisieren.

Nothine 6. Sep 2004 21:30

Re: prozeduraufruf bei programmstart?
 
Zitat:

Zitat von SirThornberry
Hmm, ich glaub ich verstehe dich nicht so recht. Durch das abprüfen des Componentstate stellst du doch sicher das alles erst zur runtime passiert. :gruebel:

öhm... ja klar, ich stell sicher das erst wenn man zur laufzeit auf die property zugreift, das passiert was ich will. ich will das aber automatisieren!
nur damit du nicht meinst ich hätte es nicht versucht, ich habe diese wundervolle if-abfrage in meinen source eingefügt, nur leider passiert dann wenn man den wert zuweist und das programm startet: ... gar nichts.

Edit: btw wahrscheinlich wärs langsam zeit euch zu verklickern was ich vorhabe damit ihr ein bißchen mehr durchblickt :mrgreen:

Edit die 2.: warum sagt mir hier eigentlich keiner das eine komponente 2mal erzeugt wird? einmal zur designtime und einmal zur runtime, dadurch is mein problem dank der csDesigning abfrage gelöst... trotzdem danke das ihr versucht habt mir zu helfen und ich ma wieder zu dumm war :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz