2013-05-05 4 views
0

Я создал компонент, который, когда он дважды щелкнул по нему во время разработки, создает другую форму. Код, который выглядит следующим образом:Получить компоненты формы во время разработки

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

В этой новой форме я должен получить компоненты основной формы дизайна, но я не мог сделать это, кто-нибудь имеет представление о том, как я могу добиться этого ? Я также пытаюсь создать с помощью «self», но затем, когда я дважды щелкнул его, delphi выйдет из строя ...

+0

'Create' должен быть немедленно * до * вы вводите' try'. –

ответ

0

Вот какой-то непроверенный код, который, как я думаю, будет работать. Назовем ваш компонент TMyComponent. Вы обязательно должны создать свой TMyComponentTest1Form в пакете времени разработки TMyComponent как часть редактора компонентов и/или редактора свойств.

Затем попробуйте создавать TMyComponentTest1Form так:

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;