Конференция "Компоненты" » Почему же не работает кнопка "Code Editor..." в диалоге? [D6, Win2k, WinXP]
 
  • Валигози2 (15.01.10 17:22) [0]
    Нашёл в интернете пример создания редактора свойства, вызывающего стандартный диалог TStringsEditDlg, но работающий не со свойством типа TStrings, а со свойством типа String. Всё работает нормально, но вот кнопка "Code Editor..." в этом диалоге почему-то просто закрывает диалог. Что ещё нужно переопределить в редакторе свойства, чтобы эта кнопка тоже заработала? Ниже полностью модуль с исходным кодом редактора свойств:

    unit TestikUnit;

    interface

    uses
     Controls, ExtCtrls, DesignIntf, DesignEditors, StringsEdit;

    procedure Register;

    implementation

    type
     TMultiStringProperty = class(TStringProperty)
     public
       function GetAttributes: TPropertyAttributes; override;
       procedure Edit; override;
     end;

    procedure TMultiStringProperty.Edit;
    var
     Dlg: TStringsEditDlg;
    begin
     Dlg:=TStringsEditDlg.Create(nil);
     try
       Dlg.Lines.Text:=Value;
       if Dlg.ShowModal=mrOk then
         Value:=Copy(Dlg.Lines.Text,1,Length(Dlg.Lines.Text)-2);
     finally
       Dlg.Free;
     end;
    end;

    function TMultiStringProperty.GetAttributes: TPropertyAttributes;
    begin
     Result := inherited GetAttributes + [paDialog];
    end;

    procedure Register;
    begin
     RegisterPropertyEditor(TypeInfo(TCaption), TPanel, 'Caption', TMultiStringProperty);
    end;

    end.

  • DimaBr © (18.01.10 08:46) [1]
    StrEdit - всё уже написано
  • Валигози2 (18.01.10 12:37) [2]

    > DimaBr ©   (18.01.10 08:46) [1]
    > StrEdit - всё уже написано

    Хм? В модуле
    StrEdit

    описан только абстрактный класс
    TStrEditDlg

    , от которого уже происходит класс
    TStringsEditDlg

    из модуля
    StringsEdit

    о котором я и написал в вопросе...
    Абстрактный класс мне ничем не поможет, так что вопрос остаётся в силе...
  • DimaBr © (18.01.10 12:48) [3]
    В модуле StrEdit описан метод создавания нового окна в редаторе кода
  • DimaBr © (18.01.10 12:49) [4]

       case ShowModal of
         mrOk: SetStrings(Lines);
         mrYes:
           begin
             // this used to be done in LibMain's TLibrary.Create but now its done here
             //  the unregister is done over in ComponentDesigner'
    s finalization
             StFilSys.Register;
             Stream := TStringStream.Create('');
             Lines.SaveToStream(Stream);
             Stream.Position := 0;
             Age := Now;
             Module := ModuleServices.CreateModule(
               TStringsModuleCreator.Create(Ident, Stream, Age));
             if Module <> nil then
             begin
               with StringsFileSystem.GetTStringsProperty(Ident, Component, GetName) do
                 DiskAge := DateTimeToFileDate(Age);
               Editor := Module.GetModuleFileEditor(0);
               if FModified then
                 Editor.MarkModified;
               Editor.Show;
             end;
           end;

  • Валигози2 (18.01.10 15:23) [5]

    > DimaBr ©   (18.01.10 12:48) [3]
    > В модуле StrEdit описан метод создавания нового окна в редаторе
    > кода

    Честно новоря не уловил смысл...

    1. Нужно наследовать редактор от
    TStringListProperty

    , а не от
    TStringProperty

    ? Но тогда начинают сыпаться ошибки (при нажатии кнопки с троеточием в инспекторе объектов - Access Violation), но это и понятно, ведь
    TStringListProperty

    предназначен для редактирования свойств типа
    TStrings

    , а нужно чтобы многострочный редактор работал для свойств типа
    String

    . (
    TStringListProperty

    для свойств типа
    TStrings

    работает замечательно - проверил, а вот для свойств типа
    String

    глючит - видимо ещё чтото нужно переопределять, а что? - непонятно)

    2. Или же нужно скопировать приведённый кусок в свой редактор свойства? Но это тоже не работает - в частности класс
    TStringsModuleCreator

    объявлен в секции
    implementation

    модуля
    StrEdit

    и по этой причине его ну никак нельзя сконструировать явно...
  • DimaBr © (18.01.10 17:02) [6]
    Никто не говорил, что нужно унаследовать этот редактор. Вы пятаетесть прикрутить классовый редактор для стрингового свойства, я вам показываю, как создаётся то самое дополнительное окно в редакторе кода, что не понятно ?

    Вам нужно написать соответствующую реакцию на mrYes
 
Конференция "Компоненты" » Почему же не работает кнопка "Code Editor..." в диалоге? [D6, Win2k, WinXP]
Есть новые Нет новых   [134466   +3][b:0.001][p:0.002]