![]() |
Control mit Subcontrols designen
Hallo,
ich möchte sowas ähnliches wie ein TPageControl schreiben. Jetzt habe ich das Problem, dass Controls, die ich innerhalb der Komponente erstelle (meine "Seiten") nicht im Formdesigner klickbar sind. Wie bekomme ich es hin, dass ich diese Controls anklicken und verändern kann (so wie die TabSheets beim PageControl)? Gruß xaromz |
Re: Control mit Subcontrols designen
Da musst Du mal in der OH suchen. Zur Designtime gibt es zwei Events, die Du überschreiben musst(kannst). der eine liefert einige Kontextmenüeinträge (ähnlich 'neue Seite' bei PageControl) und im anderen gibst Du ein Component zurück, das an der geklickten Stelle liegt. Wie die genau heißen, weiß ich jetzt auch nicht, aber wenn du bissi wühlst, findest Dus.
p.s.: schau mal unter thema Komponentenentwicklung nach. |
Re: Control mit Subcontrols designen
Hallo,
Zitat:
Gruß xaromz |
Re: Control mit Subcontrols designen
Hallo,
ich habe mich jetzt in der OH umgesehen und auch stundenlang auf die VCL-Sourcen gestiert. Leider ist mir dabei keine Erleuchtung zuteil geworden. Wenn also jemand weiß, wie ich per Programm Komponenten erzeugen kann, die sich im Designer so verhalten, wie vom Benutzer erstellte, dann soll er sich gefälligst melden :wink: . Gruß xaromz |
Re: Control mit Subcontrols designen
Also für zusätzliche Menüeinträge ala 'Neue Seite' beim PageControl hab ich was gefunden: GetVerbCount, GetVerb und ExecuteVerb. Die erste liefert die Anzahl der customer-Kontextmenüeinträge, die zweite die Einträge selber (über Index). Diese beiden Funktionen werden in Deiner Komponente greufen, wenn während der Designzeit jemand auf die Komponente rechtsklickt, die dritte, wenn einer der Einträge ausgewählt wird.
Delphi-Quellcode:
type
THelloGoodByeComponentEditor = class(TComponentEditor) procedure ExecuteVerb(Index: Integer); override; function GetVerb(Index: Integer): string; override; function GetVerbCount: Integer; override; end; procedure THelloGoodByeComponentEditor.ExecuteVerb(Index: Integer); begin case Index of 0 : ShowMessage('Hello'); 1 : ShowMessage('Goodbye'); end; end; function THelloGoodByeComponentEditor.GetVerb(Index: Integer): string; begin case Index of 0: Result := 'Arrive'; 1 : Result := 'Depart'; end; end; function THelloGoodByeComponentEditor.GetVerbCount: Integer; begin Result := 2; end; |
Re: Control mit Subcontrols designen
Hallo,
Danke :thumb: . Das hilft mir schon mal weiter, um meine Seiten zu erstellen (wobei das auch schon bisher über die Header funktioniert, die sind eine Collection). Leider hilft mir das aber bei meinem eigentlichen Problem nicht weiter. Weiß eigentlich jemand, wo der Quelltext des ComponentEditor für das PageControl steckt? Den hab' ich in den VCL-Quellen nicht gefunden. Gruß xaromz |
Re: Control mit Subcontrols designen
Ich bin mi nicht ganz sicher, allerdings benutzt der Object-Inspector die Unit TypInfo.pas und hangelt sich Anhand der TObject-eigenschaft Components[] durch die Compnenten.
Daher solltest du bei deinen Subcomponenten das Create(Aowner : TComponent) mit der erzeugenden Compnente aufrufen also create(self) , keinesfalls mit Create(application), oder create(nil). Dann noch den Parent setzen, sollte funktionieren. Die Frage ist, ob du die Subkomponenten nicht auch als published definieren musst. ungefähr so :
Delphi-Quellcode:
Hab geradee kein Delphi zur Hand, kanns also nicht ausprobieren.
private
fSubComponent : tWinControl; published property subComponent : tWinControl read fSubComponent ; MfG Kolbaschedder |
Re: Control mit Subcontrols designen
Hallo,
Zitat:
Zitat:
Zitat:
Gruß xaromz |
Re: Control mit Subcontrols designen
Delphi-Quellcode:
funktioniert bei mir.
unit Containerdemo;
interface uses sysUtils, stdCtrls, extCtrls, classes ; type tContainerDemo = class(TPanel) private fEdit : tEdit; public constructor Create(Aowner : Tcomponent);override; destructor Destroy;override; published property edit : tEdit read fEdit write fEdit; end; procedure Register; implementation procedure Register; begin registerComponents('demo', [tContainerDemo]); end; constructor tContainerDemo.Create(Aowner : Tcomponent); begin inherited; fEdit := TEdit.Create(Aowner); fEdit.Parent := self; fEdit.Name := 'CD_Edit'; fEdit.Top := 0; fEdit.width := self.Width ; end; destructor tContainerDemo.Destroy; begin fEdit.Free; inherited; end; end. mit "fEdit.Name" musst du aufpassen, da der Name Eindeutig oder leer sein muss. MfG Kolbaschedder |
Re: Control mit Subcontrols designen
Hallo,
ich habe das Problem gelöst. Man muss die Subkomponenten mit dem Form als Owner erzeugen, dann sind sie im Designer verfügbar. Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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