Наш партнер Genesis Hackspace
  1. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.033
    Симпатии:
    5
    обьясни что тебе надо, в твоей постановке вопрос лишен смысла
     
  2. Мне нужно это для создания компонентов, получается из плагина передается функция в ядро AddMenuItem(Owner,Caption,Name:string; Proc:TNotifyEvent);

    Выполняется эта функция следующим образом:
    Код (Text):
      procedure TMyPlugClass.AddMenuItem(Owner,Caption,Name:string;Proc:TNotifyEvent);
    var NewItem:TMenuItem;
    Own:TObject;
    begin
    Own:=StrToObj(Owner);
    NewItem:=TMenuItem.Create(Own as TMainMenu);
    NewItem.Caption:=MenuItemCaption;
    NewItem.OnClick:=Proc;
    (Own as TMainMenu).Items.Add(NewItem);
    end;
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    нада исчо радителя передавать.... хотя можно и не передавать

    чтото типа такого(может что то не точно - писал прямо на странице,а не в делфи)

    Код (Text):
    function StrToObj(sObj : string): tObject
    begin
    If sObj = "TmainMenu" then begin
    StrToObj:=TMenuMenu.Create(nil);
    end;

    ....
    end;
     
  4. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.033
    Симпатии:
    5
    Это форум программистов, а не телепатов.

    Owner -это что за сторока? она каким то образом индентифицирует объек? или это сериализация объетка? В общем случае такое преобразование совершить нельзя.
     
  5. DIR3ct0r

    DIR3ct0r Гость

    взял из справочной информации Delphi по TMemoryStream:

    Код (Text):
    function ComponentToString(Component: TComponent): string;
    var
    BinStream:TMemoryStream;
    StrStream: TStringStream;
    s: string;
    begin
    BinStream := TMemoryStream.Create;
    try
    StrStream := TStringStream.Create(s);
    try
    BinStream.WriteComponent(Component);
    BinStream.Seek(0, soFromBeginning);
    ObjectBinaryToText(BinStream, StrStream);
    StrStream.Seek(0, soFromBeginning);
    Result:= StrStream.DataString;
    finally
    StrStream.Free;

    end;
    finally
    BinStream.Free
    end;
    end;

    function StringToComponent(Value: string): TComponent;
    var
    StrStream:TStringStream;
    BinStream: TMemoryStream;
    begin
    StrStream := TStringStream.Create(Value);
    try
    BinStream := TMemoryStream.Create;
    try
    ObjectTextToBinary(StrStream, BinStream);
    BinStream.Seek(0, soFromBeginning);
    Result := BinStream.ReadComponent(nil);
    finally
    BinStream.Free;
    end;
    finally
    StrStream.Free;
    end;
    end;
     
  6. zubr

    zubr Гость

    Для: [email protected]
    В любом случае, для твоей задачи, в твоем классе надо иметь ссылку на компонент-родитель меню (TForm) или на само меню (TMainMenu). То есть что то типа параметра в конструкторе класса:
    Код (Text):
     
    TMyPlugClass.Create(MainForm:TForm);
    begin
    m_MainForm:=MainForm;//здесь m_MainForm-приватный член класса TMyPlugClass
    end;
    В самой функции StrToObj, используя m_MainForm.FindComponent, если есть компонент с таким именем, возвращать указатель на искомый компонент.
     
Загрузка...

Поделиться этой страницей