AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente findet PopupMenu nicht

Offene Frage von "RedOne"
Ein Thema von RedOne · begonnen am 1. Mär 2013
Antwort Antwort
RedOne

Registriert seit: 2. Jun 2008
71 Beiträge
 
Delphi XE2 Professional
 
#1

Komponente findet PopupMenu nicht

  Alt 1. Mär 2013, 10:17
Hallo miteinander

Bei mir happert's irgendwie an einer Komponente, die ich geschrieben habe. Mir ist irgendwie (nicht) mehr klar, in welcher Reihenfolge was wann erstellt wird.
Und zwar hab ich folgendes Szenario:

Ich habe eine Komponente (abgeleitet von TComponent) die ich zu Designtime auf mein Form oder Frame knalle. Diese Komponente hat die Eigenschaft "active". Ist dies gesetzt, soll beim Aufruf des Form/Frames die Komponente beginnen zu arbeiten.
In diesem active-property werden alle Unterkomponenten des Parents durchgeloopt. Wenn die Komponente also auf einem Frame liegt, werden alle Komponenten (wie Edits, Labels, etc) dieses Frames abgearbeitet.
Dies funktioniert gut, bis auf das Popupmenu. Dies findet er einfach nicht. Gebe ich die Anzahl Komponenten zurück, so hat er viel weniger als wenn ich die Komponentenanzahl z.B. bei einem Buttonklick anzeige.
Daher meine Vermutung: Das active-property wird gesetzt bevor alle Komponenten wirklich gezeichnet wurden.
Dazu muss ich noch sagen, dass die Komponente auf dem geerbten Form/Frame liegt und das Popupmenu auf dem abgeleiteten Frame.

Handelt es sich um ein Form könnte ich mich irgendwie ins OnFormCreate oder so einklinken, aber beim Frame gibt es sowas nicht.

Hat da jemand eine Idee?

Verkürzter Code:
Delphi-Quellcode:
  TcTrans = class(TComponent)
  private
    FActive: Boolean;
    FForm: TComponent;
  protected
    procedure SetActive(const Value: Boolean);
  public
    constructor Create( _owner: TComponent ); override;
    destructor Destroy; override;
  published
    property Active: Boolean read FActive write SetActive default false;
  end;


constructor TcTrans.Create(_owner: TComponent);
begin
  inherited;
  FForm:= _owner;
  FActive:= false;
end;

procedure TcTrans.SetActive(const Value: Boolean);
var
  i: Integer;
begin
  if Value then begin
    for i:= 0 to FForm.ComponentCount - 1 do begin
      if FForm.Component[ i ] is TPopupMenu then
        ShowMessage('Chewbacca!');
    end;
    ShowMessage(IntToStr(FForm.ComponentCount));
  end;
end;
  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 12:18 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