-
Доброе время суток! Предыстория: Есть текстовое поле после внесения текста необходимо наложить "свво" eoReadOnlyНемного поискал получился такой вариант код ниже: Вопрос в следующем можно ли обратиться к "свву" eoReadOnly более прямым путем? ... Можно его задавать при создании Edit1Box:= NewEditbox(form,[eoReadonly]) ... program Project1;
uses
windows,messages,
kol;
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); Edit1Box.Color := clwindow;
Button.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));
Run(Applet);
end.
-
> Можно его задавать при создании
Нужно. Для того и существует 2-й параметр функции NewEditBox(). Если нужно в runtime, то есть свойство Style:
Edit1Box.Style := Edit1Box.Style or ES_READONLY;
-
program Project1;
uses
windows,messages,
kol;
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); Edit1Box.Color := clwindow;
Button.OnClick:=TonEvent(MakeMethod(nil,@clickbutton1));
Run(Applet);
end. Попробовал вот так. не робит. я могу после этого изменять текст EditBox.
-
>> Вопрос в следующем можно ли обратиться к "свву" eoReadOnly Тогда уже через GetWindowLong/SetWindowLong.
-
Посмотрел по документации. 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;
-
Спасибо) Теперь работает) С наступившим Новым Годом!!!! =)
|