Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Вопрос про свво eoReadOnly [Delphi, Windows]


RusSun ©   (27.12.17 20:51

Доброе время суток!
Предыстория:
Есть текстовое поле после внесения текста необходимо
наложить "свво" 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]

Спасибо) Теперь работает) С наступившим Новым Годом!!!! =)


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо