Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.14;
Скачать: CL | DM;

Вниз

отключить 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.049 c
3-1120627489
Тучудище
2005-07-06 09:24
2005.08.14
FibPlus 5.3.0 Release не работает LookupCache:=true??


3-1120721303
Lexa
2005-07-07 11:28
2005.08.14
При открытии базы *.mdb создается файл *.ldb


1-1122023678
DimaBr
2005-07-22 13:14
2005.08.14
Handle окна компонента


1-1122460119
Vsr
2005-07-27 14:28
2005.08.14
Вызов функции из dll


1-1122545825
Ирина
2005-07-28 14:17
2005.08.14
Верхний регистр