Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Внизотключить RichEdit Найти похожие ветки
← →
Андрей Молчанов (2005-07-21 18:35) [0]Здравствуйте!
Необходимо отключить возможность выделения текста в RichEdit. Enable не подходит - должна оставаться возможность прокручивать ScrollBar.
Пожалуйста, помогите!
← →
vrem (2005-07-21 18:38) [1]richedit.selstart
richedit.sellength
← →
Андрей Молчанов (2005-07-21 18:40) [2]А поподробнее?
← →
vrem (2005-07-21 18:42) [3]когда пользователь что то выделяет - отменять выделение. почитайте в справке. хотя может есть другие методы.
← →
Андрей Молчанов (2005-07-21 18:53) [4]в справке пусто :(
При использовании
richedit.selstart
richedit.sellength
получается не то, все равно все выделяется, пусть и на время.
Нужно, чтобы было как при использовании richedit.enabled := false, но с работующим скролл-баром.
← →
Андрей Молчанов (2005-07-21 19:14) [5]Неужели никто не знает?
← →
}{eRsOn (2005-07-21 19:18) [6]На этом форуме RichEdit - Дас ист Шайсе! т.е Закрытая тема!
← →
vrem (2005-07-21 19:22) [7]Андрей Молчанов
Нужно что бы пользователь не смог скопировать?
Думаю мой способ не позволит скопировать.
← →
Андрей Молчанов (2005-07-21 19:29) [8]RichEdit используется в качестве средства отображения лога операции. Информация там изменяется. Нужно отключить возможность выделения, чтобы не сбивать пользователя и сделать интерфейс проще.
← →
Alexander Panov © (2005-07-21 19:31) [9]Андрей Молчанов (21.07.05 19:29) [8]
RichEdit используется в качестве средства отображения лога операции
Странно, что для отображения простейшей текстовой информации используется RichEdit. Почему бы тогда не писать сразу в документ Word?
← →
Юрий Зотов © (2005-07-21 19:33) [10]> Андрей Молчанов (21.07.05 19:29) [8]
Я бы просто поставил ReadOnly - и пусть выделяет себе, сколько хочет. Может, ему часть лога скопировать понадобится - ну и пусть копирует.
← →
Андрей Молчанов (2005-07-21 19:45) [11]> Странно, что для отображения простейшей текстовой информации > используется RichEdit. Почему бы тогда не писать сразу в > > > документ Word?
А какие еще варианты - мне в начале часть его надо выделять жирным шрифтом. Если Вы знаете другие способы - пожалуйста, напишите. Лог вот такой:
Preparing for archiving. It can take several minutes.
Backing up the My Documents item is started.
Compression is started at 19:44.
The current file: C:\...\Delphi\Backup\33\Unit9.dfm
← →
Андрей Молчанов (2005-07-21 19:46) [12]А в начале такой:
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.
← →
Alexander Panov © (2005-07-21 20:03) [13]Андрей Молчанов (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 20:44) [14]Спасибо попробую этот вариант. Только, пожалуйста, пока не закрывайте тему.
← →
TUser © (2005-07-22 07:24) [15]Действительно - странное желание. Но реализуемо.
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-22 08:49) [16]Спасибо огромное!
← →
Андрей Молчанов (2005-07-22 08:57) [17]Нет, блин, попробовал - не подошло. :(
RichEdit начинает жутко мигать и все равно в него можно поставить курсор. Нужен же аналог enabled := false, но с работающим скроллбаром. Похоже, придется переходить на TListBox.
← →
tormoz (2005-07-22 11:47) [18]Положи скроллбокс, на него ричедит с enabled=false;
reachedit.heigth изменяй в зависимости от количества строк в нем... и все...
← →
TUser © (2005-07-22 12:35) [19]Мигать у меня особенно не начинает. Правда, с большим текстом не пробовал. А то, что курсор можно поставить - я отвечал на вопрос, где была запрошена невозможность выделить часть текста + скроллбар. Решение этому удвлетворяет.
← →
tormoz (2005-07-22 13:43) [20]А вот так не пробовал? По-моему, идеальный вариант....
procedure TForm1.RichEdit1Enter(Sender: TObject);
begin
Button1.SetFocus;
end;
← →
Андрей Молчанов (2005-07-22 18:38) [21]TUser
Я имел ввиду про курсор. Извиняюсь за неправильную постанвку вопроса.
tormoz
Помогает :)
Тогда еще один вопрос - а как определить, на каком элементе находился фокус до этого?
← →
Джо © (2005-07-22 18:40) [22]А зачем пользователю запрещать что-то копировать из лога? Там что-то секретное? Тогда зачем его показывать? Вот чего я никак не пойму...
← →
Андрей Молчанов (2005-07-22 18:47) [23]Скажем так, логом я его зря назвал. Это скорее контейнер подсказок к процессу. Кому интересно - www.power-backup.com
← →
Alexander Panov © (2005-07-22 18:51) [24]Андрей Молчанов (22.07.05 18:38) [21]
Тогда еще один вопрос - а как определить, на каком элементе находился фокус до этого?
Сохранять в переменной.
← →
Андрей Молчанов (2005-07-22 19:06) [25]
> Сохранять в переменной.
А в каком событии?
← →
Андрей Молчанов (2005-07-22 19:44) [26]
> Сохранять в переменной.
Не могли бы Вы привести кусок кода?
← →
Андрей Молчанов (2005-07-22 20:38) [27]Пожалуйста, помогите!
← →
Андрей Молчанов (2005-07-22 22:28) [28]Вот что мне удалось найти:
1. Можно регистрировать контрол в переменную при получении им фокуса.
2. Могут быть всякие заморочки вроде того, что форма была не активна, предыдущий хозяин фокуса не доступен (Enable = False) и т.д.
Так вот - нет ли какого-нибудь стандартного способа получения предыдущего доступного хозяина фокуса? Какая-нибудь функция вроде Form1.GetLastFocusedControl.
← →
Джо © (2005-07-22 22:51) [29]Используй WinAPI-функцию SetFocus. Она возвращает хэндл окна, бывшего активным до ее вызова. Или я чего-то не понял?
← →
Андрей Молчанов (2005-07-22 23:06) [30]Спасибо!
Написалprocedure TForm1.RichEdit1Enter(Sender: TObject);
begin
Windows.SetFocus(Windows.SetFocus(0));
end;
Все работает!!! :) Большое спасибо всем участникам конференции, справедливо отвечавшим на мои вопросы!
← →
имя (2005-07-22 23:15) [31]Удалено модератором
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.01 c