1

Ich verfüge über ein benutzerdefiniertes FireMonkey-Steuerelement (TComboBox), das auch über einen benutzerdefinierten TComponentEditor verfügt. Wenn ich die ExecuteVerb Methode außer Kraft setzen und versuchen, eine untergeordnete Komponente (custom TListBoxControl) die benutzerdefinierte hinzufügen TComboBox es nicht zur EntwurfszeitBenutzerdefinierte Firemonkey-Komponente, die TComponentEditor implementiert. Hinzufügen eines untergeordneten Steuerelements zum übergeordneten Element zur Entwurfszeit

Standard TComboBox Verhalten gezeigt bekommt:

Default TComboBox behavior

Individuelle TComboBox

Custom TComboBox

Mein ExecuteVerb Code:

var 
    PpComboItem : TPpListBoxItem; 
    PpCombo: TPpComboBox; 
begin 
    if (Component is TPpComboBox) then 
    PpCombo := (Component as TPpComboBox) else 
     exit; 

    PpComboItem := TPpListBoxItem.Create(PpCombo); 
    PpComboItem.Parent := PpCombo; 
end 

Ich habe versucht, den Weg zu verfolgen, die TComboBox versucht, dies zu tun, aber kann nicht scheinen, das Gerät mit der korrekten Implementierung zu finden

** ** Bearbeiten

Ok - ich habe es geschafft, einen Blick zu haben, wie die Jungs von TMS erreicht dies mit ihren Komponenten (gekauft und bezahlt), und ich habe es geschafft, die folgende

var 
    PpComboItem : TPpListBoxItem; 
    PpCombo: TPpComboBox; 
begin 
    inherited; 
    if (Component is TPpComboBox) then 
    PpCombo := (Component as TPpComboBox) else 
     exit; 

    PpComboItem := (TPpListBoxItem(Designer.CreateComponent(TPpListBoxItem, PpCombo, 10, 10, 100, 100))); 
    PpComboItem.Parent := PpCombo; 
    Designer.Modified; 
end; 

Aber extrapolieren, wenn ich die AddTPpListBoxItem im ComponentEditor klicken erhalte ich die followin g Fehler:

Class TPpListBoxItem is not applicable to this module

+0

Ich weiß nicht, ob es einfacher sein könnte, den Artikeleditor der TCustomListbox zu erweitern, um ein neues TListBoxItem im Dropdown mit allen anderen TListBoxItem-Typen zu haben? –

Antwort

1

Ich habe meine Antwort gefunden. Um diese Arbeiten Sie

benötigen

Sicherstellen, dass die Komponente, die Sie versuchen, als ein Kind zum Vater hinzuzufügen ist registriert:

USES TPpListBoxItem.pas, TPpComboBox.pas, DesignIntf, DesignEditors 

//TComponentEditor Type Decleration // 

procedure Register; 
begin 
    RegisterComponents('Sample', [TPpListBoxItem]); 
    RegisterComponents('Sample', [TPpComboBox]); 
    RegisterComponentEditor(TPpComboBox, TComboComponentEditor); 
end; 

Aufschalten der ExecuteVerb Methode des TComponentEditor der übergeordneten Komponente (finden Sie den Code in meiner Frage , wo der erste bearbeiten ist):

Grundsätzlich ist das Fleisch:

... 
PpComboItem := (TPpListBoxItem(Designer.CreateComponent(TPpListBoxItem, PpCombo, 10, 10, 100, 100))); 
PpComboItem.Parent := PpCombo; 
Designer.Modified; 
... 

Voilà!

Verwandte Themen