AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Feststellen ob Komponente zur Laufzeit erstellt wurde
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen ob Komponente zur Laufzeit erstellt wurde

Ein Thema von APP · begonnen am 5. Mär 2003 · letzter Beitrag vom 6. Mär 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

Feststellen ob Komponente zur Laufzeit erstellt wurde

  Alt 5. Mär 2003, 10:28
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
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#2

Lösung gefunden!

  Alt 5. Mär 2003, 11:07
Habe die Lösung gefunden!

Delphi-Quellcode:
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;
p.s. Wie sagte schon ein Freund zu mir: "Wer das Help-File lesen kann, hat mehr vom Leben!"
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#3
  Alt 5. Mär 2003, 11:20
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]
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4
  Alt 5. Mär 2003, 13:09
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:
  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;
ComponentState bleibt leer, ich habe keinen blassen Schimmer was ich machen muß damit ComponentState korrekt funktioniert?!

Hilfe!
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#5
  Alt 5. Mär 2003, 13:43
Ich glaube es müsste heißen:

Delphi-Quellcode:
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;
ComponentState ist eine Menge, kuck dir die handhabung in der Hilfe mal genauer an.
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#6
  Alt 5. Mär 2003, 14:01
@JanJan da hast Du natürlich Recht

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.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#7
  Alt 5. Mär 2003, 14:20
Es kann sein das csInline nicht das ist, wofür du es benutzen willst.

Aus der Hilfe:
Zitat:
csInline
Wird gesetzt, wenn die Komponente eine Komponente der obersten Ebene darstellt, die zur Laufzeit geändert und in ein Formular eingebettet werden kann. Dieses Flag wird zur Identifizierung von verschachtelten Frames während des Ladens und Speicherns verwendet.
Der letzte Satz läßt darauf schließen das das was sehr spezielles ist. Auch Google hilft da nicht viel weiter...


Das ComponentState bei dir leer ist kann gut sein, kuck dir mal die Flags genauer an. Normalerweise sollte da keiner gesetzt sein...
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8
  Alt 5. Mär 2003, 15:55
Hier der Code
Delphi-Quellcode:
...
if csDesigning in ComponentState then
begin
  // Design-Time Aktion!
end else begin
  // Run-Time Aktion!
end;
// All-Time Aktionen :)
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
janjan

Registriert seit: 16. Jan 2003
Ort: Bonn ("links über Königswinter ")
240 Beiträge
 
Delphi 4 Standard
 
#9
  Alt 5. Mär 2003, 17:57
@APP
Hm, ich glaub ich hab dich falsch verstanden, 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.
Die Wichtigkeit eines Postings im Forum ist reziprok zur Anzahl der enthaltenenen, kumulierten Ausrufungszeichen!!!
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#10
  Alt 5. Mär 2003, 20:49
@janjan
Zitat:
Hm, ich glaub ich hab dich falsch verstanden, ich dachte du wolltest wissen wie man feststellen kann ob eine Komponente per Drag and Drop oder dynamisch per TKomponente.Create erzeugt wurde...
Du hast es erfasst, genau das ist mein Problem!

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:
PROCEDURE TFlappError.Loaded;
BEGIN
   INHERITED Loaded;
   IF Active THEN Application.OnException := onFlappException;
END;
Leider funktioniert ComponentState nicht.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  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 01:00 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