Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TCustomControl mit ohne runtime Button (https://www.delphipraxis.net/51000-tcustomcontrol-mit-ohne-runtime-button.html)

Corelgott 4. Aug 2005 09:57


TCustomControl mit ohne runtime Button
 
Hi @ all,

ich versuche mich gerade an Komponenten:

ich habe eine Comp:

Code:
type TABC = class(TCustomControl)
  protected
    _btn  : TButton;
  public
    constructor create(AOwner : TComponent);
    procedure makeButton();
end;

-- // --
constructor TABC.create(AOwner : TComponent);
begin
  inherited;
  ControlStyle := ControlStyle + [csAcceptsControls];
end;

procedure TABC.makeButton();
begin
  _btn := TButton.create(Self);
  _btn.parent := Self;
  _btn.name   := 'foobar';
  _btn.top    := 0;
  _btn.left   := 0;
  _btn.height := 100;
  _btn.width  := 100;
  _btn.visible := true;
end;
ca. so...

Also ich ziehe in der dt TABC auf die Form... ist ok da soll auch kein button sein weil makeButton ja nicht aufgerufen wird...

So runtime....

makeButton wird aufgerufen...
nu dachte ich ich könnte meinen button sehen....
aber nö...

(Eigentlich ist es intern kein button sondern eine weitere (!= TABC) Komponente die ich dyn-createn will; aber selbst mit TButton kann ich das nicht createn...)

So und nu kommst: wenn ich das in den Constructor meiner Kompo packe...
Dann funzt das! dann habe ich auch nen button... (Das kann ich aber leider nicht so lösen, weil ich selbst zu erst warten muss, bis mir eine andere Kompo ne Datei geladen hat... -> auf Event Warten bevor ich mine Compo anzeigen kann / darf)

Wieso geht das alles auf meiner Kompo nicht?
(habe das ganze auf ner Form versucht... TButton1Click -> und *Zack* war da ein neuer Button...)

Hat da wer man nen Tip für mich?!
Lösungen werden auch gerne genommen ^^ thx!

cya & thx
Corelgott

Corelgott 4. Aug 2005 11:55

Re: TCustomControl mit ohne runtime Button
 
OK ALSO

wie am rande erwähnt habe ich ein event genutzt, um meiner kompo mit zu teilen, wann es wieviele 'Controls' auf sich erstellen soll...

An sich ist das auch ok... Aber:

Das event wurde von einem eigenen Thread ausgelöst. In der Execute des threads steht Fertig(Self); (Sinngemäß)
Das ging dann über die Main-Form bis hin zu kompo..
hat brav die buttons erstellt sprang zurück in den Thread....
Der sich dann terminierte....
Und auch alle unter seiner herrschaft erstellten Obj mit sich riß...

NA GEIL!

So praktisch Threads auch sind... Ich kann sie irgendwie nicht richtig benutzen...! *narf*

Btw.:

Die Lösung := event nicht in Execute Sonder durch OnTerminate aufrufen!

cya & thx
for all the help

Corelgott

phlux 4. Aug 2005 12:02

Re: TCustomControl mit ohne runtime Button
 
1. der constructor wird nicht "überritten"
2. führst du dein makebutton nicht aus, logischer weise müsste der aufruf in den erweiterten constructor, oder du schreibst den code dort direkt rein.

Corelgott 4. Aug 2005 17:46

Re: TCustomControl mit ohne runtime Button
 
Hi & thx für die antwort

Also:

@makebutton:

Zitat:

Zitat von Corelgott
ist ok da soll auch kein button sein weil makeButton ja nicht aufgerufen wird...

das ist/war schon verständlich und auch so gewollt... ^^

@constructor & override... ok das habe ich schlicht wech vergässen ^^

**sry**!

Aber wie villeicht bereits bemerkt habe ich das Prob schon lösen können... es lag daran, das selbst wenn der Thread, der die Objs erstellt, nicht der Owner bzw. Parent der Componenten ist, sie DENNOCH zerstört werden, wenn er terminated....

** bin mir immer noch nicht so ganz im klaren, ob das so ok ist bzw. ob das so seien sollte**

Aber ich habe es erst mal "around-geworked" (man entschuldige dieses pseudo-verb)

thx & cya
Corelgott


Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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