2013-05-05 2 views
0

J'ai créé un composant qui, en double-cliquant dessus au moment du design, crée un autre formulaire. Le code qui est le suivant:Récupère les composants d'un formulaire au moment de la conception

function TMyComponentTest1.Execute: Boolean; 
var 
    Form: TMyComponentTest1Form; 
begin 
    try 
    Form := TMyComponentTest1Form.Create (nil); 
    Form.ShowModal; 
    finally 
    Form.Free; 
    end; 
end; 

Dans cette nouvelle forme, je dois obtenir les composants de la principale forme de conception, mais je ne pouvais pas le faire, quelqu'un a une idée de la façon dont je peux accomplir cette ? J'essaie aussi de créer avec "self" mais quand je double-clique dessus, Delphi se bloque ...

+0

'create' doit être immédiatement * avant * vous entrez' try'. –

Répondre

0

Voici un code non testé qui fonctionnera. Appelons votre composant TMyComponent. Vous devez sûrement créer votre TMyComponentTest1Form dans le package designtime de TMyComponent dans le cadre d'un éditeur de composants et/ou d'un éditeur de propriétés.

Ensuite, essayez de créer TMyComponentTest1Form comme ceci:

function TMyComponentTest1.Execute: Boolean; 
var 
    aForm: TMyComponentTest1Form; 
    OwnerForm: TForm; 
    aMyComponent: TMyComponent; 
begin 
    {OwnerForm is your main design form} 
    OwnerForm := nil; 

    {Get your component on the main design form} 
    aMyComponent := TMyComponent(GetComponent(0)) 

    {Make sure your component's owner is a TForm} 
    if (aMyComponent.Owner is TForm) then 
    OwnerForm := TForm(aMyComponent.Owner); 

    {You problem may be solved by making component form owner the Application} 
    aForm := TMyComponentTest1Form.Create(Application); 
    try 
    { 
    Now you should be able iterate the components owned by OwnerForm 
    right here. If you do not want to do it here, add a TForm property 
    to your component and assign OwnerForm to it. 
    } 
    aForm.ShowModal; 
    finally 
    aForm.Free; 
    end; 
end; 
Questions connexes