Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-1107820750
fxt
2005-02-08 02:59
2005.08.14
Потоковое видео


14-1121927527
AlexG
2005-07-21 10:32
2005.08.14
Как отладить выполнение звуковых команд программой без микрофона?


1-1122475280
REA
2005-07-27 18:41
2005.08.14
WebBrowser и мистика


1-1122122718
xroot
2005-07-23 16:45
2005.08.14
дебаггер


1-1122294450
Solo_Mes
2005-07-25 16:27
2005.08.14
Завершение работы приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский