![]() |
Feststellen ob Komponente zur Laufzeit erstellt wurde
Hallo,
ich möchte im Create Ereignis meiner (visuellen) Komponente feststellen, ob diese erst zur Laufzeit oder schon beim Design erstellt wurde. (Ich versuchte es schon mal mit GetChildParent u.ä. aber irgendwie funkte das nicht so recht...) Hat jemand eine Idee? Armin |
Lösung gefunden!
Habe die Lösung gefunden!
Delphi-Quellcode:
p.s. Wie sagte schon ein Freund zu mir: "Wer das Help-File lesen kann, hat mehr vom Leben!"
CONSTRUCTOR TFlappError.Create(Owner: TComponent);
BEGIN INHERITED Create(Owner); ... IF ComponentState = [csInline] THEN BEGIN END ELSE BEGIN IF FIniFileName = '' THEN FIniFileName := ChangeFileExt(Application.ExeName, '.INI'); SetFlappErrorProp(Self); END; END; :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: |
Du kannst ja deine Signatur ergänzen:
Code:
;)
BEGIN
real programmers are using C/C++ - smart developers Delphi; the smartest of them are reading the fu***** manual; END; [edit=Daniel B]Habe mal ein Wort Zensiert. Man könnte auch "Read the fine manual" sagen. ;) MfG Daniel B.[/edit] |
Tja, das mit der Signatur ist gut,
aber leider langt es bei mir scheinbar mit dem Lesen nicht, da meine Kompo nicht Funktioniert!
Delphi-Quellcode:
ComponentState bleibt leer, ich habe keinen blassen Schimmer was ich machen muß damit ComponentState korrekt funktioniert?!
IF ComponentState = [csInline] THEN // Komponente ist zur Designtime erstellt worden
BEGIN IF FIniFileName <> '' THEN SetFlappErrorProp(Self); // Wenn Inidatei vorhanden ist, dann lesen END ELSE // Komponente ist zur Runtime erstellt worden BEGIN Application.OnException := onFlappException; // FActive := TRUE; IF FIniFileName = '' THEN FIniFileName := ChangeFileExt(Application.ExeName, '.INI'); SetFlappErrorProp(Self); // InI Lesen END; Hilfe! :bounce1: |
Ich glaube es müsste heißen:
Delphi-Quellcode:
ComponentState ist eine Menge, kuck dir die handhabung in der Hilfe mal genauer an.
if csInline in ComponentState then // Komponente ist zur Designtime erstellt worden
begin if FIniFileName <> '' then SetFlappErrorProp(Self); // Wenn Inidatei vorhanden ist, dann lesen end else // Komponente ist zur Runtime erstellt worden begin Application.OnException := onFlappException; // FActive := true; if FIniFileName = '' then FIniFileName := ChangeFileExt(Application.ExeName, '.INI'); SetFlappErrorProp(Self); // InI Lesen end; |
@JanJan :oops: da hast Du natürlich Recht :oops:
ABER: wenn ich meinen Source durch-debugge, sehe ich, dass ComponentState leer ist! Ich denke, ich muß ComponentState in meiner Komponenten-Deklaration irgendwie (als Property?) mit einbinden (Ist meine 1. Kompo, daher bin ich unsicher). Ich 'bestehe' auch nicht auf ComponentState, es kann auch eine andere Lösung sein um festzustellen ob die Kompo zur Laufzeit erstellt wurde oder nicht. |
Es kann sein das csInline nicht das ist, wofür du es benutzen willst.
Aus der Hilfe: Zitat:
Das ComponentState bei dir leer ist kann gut sein, kuck dir mal die Flags genauer an. Normalerweise sollte da keiner gesetzt sein... |
Hier der Code
Delphi-Quellcode:
...:cat:...
...
if csDesigning in ComponentState then begin // Design-Time Aktion! end else begin // Run-Time Aktion! end; // All-Time Aktionen :) |
@APP
Hm, ich glaub ich hab dich falsch verstanden, :oops: ich dachte du wolltest wissen wie man feststellen kann ob eine Komponente per Drag and Drop oder dynamisch per TKomponente.Create erzeugt wurde... Wenn du nur wissen wolltest ob sich die Komponente im Design-Modus befindet oder nicht, dann musst du es natürlich so machen wie Sakura es vorgeschlagen hat. |
@janjan
Zitat:
Ich möchte im Constructor Create feststellen wann/wie die Kompo erstellt wurde, da ich, wenn die Kompo zur RunTime erstellt wurde, den ExceptionHandler automatisch zuweisen möchte (und bei Bedarf Daten aus einer Ini-Datei laden). Ist die Kompo schon zur Designzeit aktiv, wird (zumindest habe ich das mit dem Debugger festgestellt) Loaded durchlaufen, hier kann ich die Kompo über die Eigenschaft Active ein/ausschalten (hier benötige ich die Daten aus der INI-Datei NICHT).
Delphi-Quellcode:
CONSTRUCTOR TFlappError.Create(Owner: TComponent);
BEGIN INHERITED Create(Owner); ... IF csDesigning IN ComponentState THEN // Komponente ist zur Designtime (=DragDrop) erstellt worden BEGIN ... END ELSE // Komponente ist zur Runtime (=dynamisch) erstellt worden BEGIN Application.OnException := onFlappException; ... END; END;
Delphi-Quellcode:
Leider funktioniert ComponentState nicht. :(
PROCEDURE TFlappError.Loaded;
BEGIN INHERITED Loaded; IF Active THEN Application.OnException := onFlappException; END; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:52 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 by Thomas Breitkreuz