![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
отключить RichEdit
Андрей Молчанов © (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.