Конференция "KOL" » Вопрос про свво eoReadOnly [Delphi, Windows]
 
  • RusSun © (27.12.17 20:51) [0]
    Доброе время суток!
    Предыстория:
    Есть текстовое поле после внесения текста необходимо
    наложить "свво" eoReadOnly
    Немного поискал получился такой вариант код ниже:

    Вопрос в следующем можно ли обратиться к "свву" eoReadOnly
    более прямым путем?
    ...
    Можно его задавать при создании
    Edit1Box:= NewEditbox(form,[eoReadonly]) ...

    program Project1;

    uses
     windows,messages,
     kol;

    {$R *.res}
    var
    form,
    button,
    Edit1Box:PControl;

    //область для процедур
    function WndProcEditBoxReadOnly( Sender: PControl; var Msg: TMsg): Boolean;
    var Options:    TEditOptions;
    begin
    Result := FALSE;
       if  (Msg.message = WM_CHAR) then
    begin
      Options:=[eoReadOnly];
      Result := TRUE;
    end;
    end;

    procedure clickbutton1(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    begin
    Edit1Box.Text:='This text is not changeble !';
    Edit1Box.AttachProc(@WndProcEditBoxReadOnly)
    end;

    Begin
    Applet := NewApplet('');
    form:=NewForm(Applet,'шаблон').SetSize(300,200).setposition(330,300);
    Button:=NewButton(form,'Make Edit1Box Readonly').SetPosition(25,75).autosize(true);
    Edit1Box := NewEditBox( form,[] ).SetSize( 225,22).SetPosition(15,25);//.SetAlign ( caClient );
    Edit1Box.Color := clwindow;
    //.centeronparent.Tabulate;
    //область для работы

    Button.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));

    Run(Applet);

    end.

  • Netspirit (29.12.17 12:19) [1]

    > Можно его задавать при создании

    Нужно. Для того и существует 2-й параметр функции NewEditBox().
    Если нужно в runtime, то есть свойство Style:
    Edit1Box.Style := Edit1Box.Style or ES_READONLY;
  • RusSun © (29.12.17 19:07) [2]
    program Project1;

    uses
     windows,messages,
     kol;

    {$R *.res}
    var
    form,
    button,
    Edit1Box:PControl;

    //область для процедур

    procedure clickbutton1(dummy:pointer;Sender:PControl; var mouse:TMouseEventData);
    begin
    Edit1Box.Text:='This text is not changeble !';
    Edit1Box.Style := Edit1Box.Style or ES_READONLY;
    end;

    Begin
    Applet := NewApplet('');
    form:=NewForm(Applet,'шаблон').SetSize(300,200).setposition(330,300);
    Button:=NewButton(form,'Make Edit1Box Readonly').SetPosition(25,75).autosize(true);
    Edit1Box := NewEditBox( form,[] ).SetSize( 225,22).SetPosition(15,25);//.SetAlign ( caClient );
    Edit1Box.Color := clwindow;
    //.centeronparent.Tabulate;
    //область для работы

    Button.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));

    Run(Applet);

    end.



    Попробовал вот так. не робит. я могу после этого изменять текст EditBox.
  • Dimaxx © (30.12.17 17:15) [3]
    >> Вопрос в следующем можно ли обратиться к "свву" eoReadOnly
    Тогда уже через GetWindowLong/SetWindowLong.
  • Netspirit (02.01.18 12:59) [4]
    Посмотрел по документации. ReadOnly устанавливается сообщением EM_SETREADONLY. Правильно делать так:
    if (Edit1Box.Style and ES_READONLY) <> 0 then
     begin
       Edit1Box.Perform(EM_SETREADONLY, 0, 0);
       Edit1Box.Style := Edit1Box.Style and (not ES_READONLY); // Рефреш стилей
       Edit1Box.Text := 'Editable';
     end
     else
     begin
       Edit1Box.Perform(EM_SETREADONLY, 1, 0);
       Edit1Box.Style := Edit1Box.Style or ES_READONLY; // Рефреш стилей
       Edit1Box.Text := 'Read only';
     end;
  • RusSun © (03.01.18 11:45) [5]
    Спасибо) Теперь работает) С наступившим Новым Годом!!!! =)
 
Конференция "KOL" » Вопрос про свво eoReadOnly [Delphi, Windows]
Есть новые Нет новых   [118243   +30][b:0][p:0.002]