![]() |
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 :? |
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; |
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 |
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...) |
Re: prozeduraufruf bei programmstart?
wo ist dann das Problem mit dem csDesigning?
Delphi-Quellcode:
Also einfach deinen Status in einer Variablen speichern und dann zur Runtime erst zusätzlich darauf reagieren.
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; 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. |
Re: prozeduraufruf bei programmstart?
Zitat:
Edit: Zitat:
|
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.
|
Re: prozeduraufruf bei programmstart?
Zitat:
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