Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

отключить RichEdit


Страницы:   1 2

Андрей Молчанов ©   (2005-07-21 18:35:00) 

Здравствуйте!

Необходимо отключить возможность выделения текста в RichEdit. Enable не подходит - должна оставаться возможность прокручивать ScrollBar.

Пожалуйста, помогите!


  (2005-07-22 23:15:00) [1]

Удалено модератором


Андрей Молчанов   (2005-07-22 23:06:00) [2]

Спасибо!
Написал
procedure TForm1.RichEdit1Enter(Sender: TObject);
begin
Windows.SetFocus(Windows.SetFocus(0));
end;

Все работает!!! :) Большое спасибо всем участникам конференции, справедливо отвечавшим на мои вопросы!


Джо   (2005-07-22 22:51:00) [3]

Используй WinAPI-функцию SetFocus. Она возвращает хэндл окна, бывшего активным до ее вызова. Или я чего-то не понял?


Андрей Молчанов   (2005-07-22 22:28:00) [4]

Вот что мне удалось найти:
1. Можно регистрировать контрол в переменную при получении им фокуса.
2. Могут быть всякие заморочки вроде того, что форма была не активна, предыдущий хозяин фокуса не доступен (Enable = False) и т.д.

Так вот - нет ли какого-нибудь стандартного способа получения предыдущего доступного хозяина фокуса? Какая-нибудь функция вроде Form1.GetLastFocusedControl.


Андрей Молчанов   (2005-07-22 20:38:00) [5]

Пожалуйста, помогите!


Андрей Молчанов   (2005-07-22 19:44:00) [6]


> Сохранять в переменной.

Не могли бы Вы привести кусок кода?


Андрей Молчанов   (2005-07-22 19:06:00) [7]


> Сохранять в переменной.

А в каком событии?


Alexander Panov   (2005-07-22 18:51:00) [8]

Андрей Молчанов   (22.07.05 18:38) [21]
Тогда еще один вопрос - а как определить, на каком элементе находился фокус до этого?


Сохранять в переменной.


Андрей Молчанов   (2005-07-22 18:47:00) [9]

Скажем так, логом я его зря назвал. Это скорее контейнер подсказок к процессу. Кому интересно - www.power-backup.com


Джо   (2005-07-22 18:40:00) [10]

А зачем пользователю запрещать что-то копировать из лога?  Там что-то секретное? Тогда зачем его показывать? Вот чего я никак не пойму...


Андрей Молчанов   (2005-07-22 18:38:00) [11]

TUser
Я имел ввиду про курсор. Извиняюсь за неправильную постанвку вопроса.

tormoz
Помогает  :)
Тогда еще один вопрос - а как определить, на каком элементе находился фокус до этого?


tormoz   (2005-07-22 13:43:00) [12]

А вот так не пробовал? По-моему, идеальный вариант....
procedure TForm1.RichEdit1Enter(Sender: TObject);
begin
Button1.SetFocus;
end;


TUser   (2005-07-22 12:35:00) [13]

Мигать у меня особенно не начинает. Правда, с большим текстом не пробовал. А то, что курсор можно поставить - я отвечал на вопрос, где была запрошена невозможность выделить часть текста + скроллбар. Решение этому удвлетворяет.


tormoz   (2005-07-22 11:47:00) [14]

Положи скроллбокс, на него ричедит с enabled=false;
reachedit.heigth изменяй в зависимости от количества строк в нем... и все...


Андрей Молчанов   (2005-07-22 08:57:00) [15]

Нет, блин, попробовал - не подошло. :(
RichEdit начинает жутко мигать и все равно в него можно поставить курсор. Нужен же аналог enabled := false, но с работающим скроллбаром. Похоже, придется переходить на TListBox.


Андрей Молчанов   (2005-07-22 08:49:00) [16]

Спасибо огромное!


TUser   (2005-07-22 07:24:00) [17]

Действительно - странное желание. Но реализуемо.

type
 TForm1 = class(TForm)
   RichEdit1: TRichEdit;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   FOldProc: TWndMethod;
   procedure NewProc (var Message: TMessage);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.NewProc (var Message: TMessage);
begin
 if Message.Msg = WM_Paint then
   RichEdit1.SelLength:=0;
 FOldProc (Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FOldProc:=RichEdit1.WindowProc;
 RichEdit1.WindowProc:=NewProc;
end;


Андрей Молчанов   (2005-07-21 20:44:00) [18]

Спасибо попробую этот вариант. Только, пожалуйста, пока не закрывайте тему.


Alexander Panov   (2005-07-21 20:03:00) [19]

Андрей Молчанов   (21.07.05 19:45) [11]
А какие еще варианты - мне в начале часть его надо выделять жирным шрифтом. Если Вы знаете другие способы - пожалуйста, напишите.


type
 TForm1 = class(TForm)
   Button1: TButton;
   lb: TListBox;
   procedure Button1Click(Sender: TObject);
   procedure lbDrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
     State: TOwnerDrawState);
...

const
 _BOLD=#01;
 _NOBOLD=#02;
...

procedure TForm1.Button1Click(Sender: TObject);
var
 s: String;
begin
 lb.Items.Add('asd'+_BOLD+'asd'+_NOBOLD+'asd');
...

procedure TForm1.lbDrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
var
Offset: Integer;
 i: integer;
 L: TListBox;
begin
 L := (Control as TListBox);
with L.Canvas do
begin
  FillRect(Rect);
  Offset := 1;
   i := 1;
   while i<Length(L.Items[Index]) do
   begin
     case L.Items[Index][i] of
       _BOLD:    Font.Style := Font.Style + [fsBold];
       _NOBOLD:  Font.Style := Font.Style - [fsBold];
       else
       begin
         TextOut(Rect.Left + Offset, Rect.Top, L.Items[Index][i]);
         Offset := Offset+ TextExtent(L.Items[Index][i]).cx;
       end;
     end;
     Inc(i);
   end;
end;
end;


PS.
 lb.Style := lbOwnerDrawFixed;


Андрей Молчанов   (2005-07-21 19:46:00) [20]

А в начале такой:

Warning! Please, close all programs that can use the files being copied, including those running in the background mode, before continuing!

Items to backup: все мое.

Click the "Start backup" button to archive the data.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо