Как убрать курсор в Memo?
Как убрать курсор в Memo?
Вроде HideCaret(Memo1.Handle);
Как убрать курсор в Memo?
HideCaret(Memo1.Handle); - у меня не сработало.
Если ты хочешь убрать курсор мышки, то измени Memo1.Cursor=crNone; Если ты хочешь избавиться от курсора ввода текста - Memo1.Enabled=false; Только теперь пользователь не сможет редактировать / копировать содержимое Memo.
Если ты хочешь избавиться от курсора ввода текста - Memo1.Enabled=false; Только теперь пользователь не сможет редактировать / копировать содержимое Memo.
HideCaret(Memo1.Handle); - у меня сработало.
Когда делаешь Memo1.Enabled=false; то цвет текста становиться серый . Можно ли поменять цвет текста?
HideCaret(Memo1.Handle); - у меня сработало.
Когда делаешь Memo1.Enabled=false; то цвет текста становиться серый . Можно ли поменять цвет текста?
Наверное, HideCaret рабоатет только в Дельфи.
Вариант в onEnter твоего Memo написать ActiveControl=Form1; То есть, когда мемо становиться активным - мы делаем активной нашу форму (или что угодно другое). Вот.
То есть, когда мемо становиться активным - мы делаем активной нашу форму (или что угодно другое). Вот.
Это уже саботаж против ничего не подозревающего пользователя. Вот.
А вообще, зачем такой изврат? Что вообще требуется сделать по первоначальной задаче?
Сначала я попробовал HideCaret, при этом курсор исчезает, но при клике на мемо появляется снова.
Если вставить HideCaret в обработчик клика, курсор все равно успевает мигнуть. В конце-концов сделал я так (привожу в сишной нотации):
Я создал свой компонент, унаследовав его от TRichEdit (ты от мемо наследуй) и такой код написал:
__fastcall TMyFormulaEdit::TMyFormulaEdit(TComponent* Owner)
: TRichEdit(Owner)
{
WindowProc=WndProc1;
}
//---------------------------------------------------------------------------
void __fastcall TMyFormulaEdit::WndProc1(Messages::TMessage &Message)
{
if ((Message.Msg == WM_SETFOCUS)&&(ReadOnly)) return;
WndProc(Message);
}
В этом случае и с цветом текста проблема решается. Т.е. ты не делаешь Мемо.Enabled:=false, вместо этого Мемо.ReadOnly:=true (оно точно также не будет ни на что реагировать и курсора там не будет). А при Мемо.ReadOnly:=true вполне можно менять цвет.
Я создал свой компонент, унаследовав его от TRichEdit (ты от мемо наследуй) и такой код написал:
__fastcall TMyFormulaEdit::TMyFormulaEdit(TComponent* Owner)
: TRichEdit(Owner)
{
WindowProc=WndProc1;
}
//---------------------------------------------------------------------------
void __fastcall TMyFormulaEdit::WndProc1(Messages::TMessage &Message)
{
if ((Message.Msg == WM_SETFOCUS)&&(ReadOnly)) return;
WndProc(Message);
}
Можно как-нибудь по подробней, а то я ничего не понял??? Я ни разу не создавал свои компоненты, поэтому лучше с примерчиком который можно отправить [EMAIL=senser@elsite.ru]сюда[/EMAIL].
Можно как-нибудь по подробней, а то я ничего не понял??? Я ни разу не создавал свои компоненты, поэтому лучше с примерчиком который можно отправить [EMAIL=senser@elsite.ru]сюда[/EMAIL].
Как делаются компоненты читай в книжке. Если я пришлю тебе исходник, он ничего не проиллюстрирует.
Тем более он у меня для Билдера, а в Delphi я их не создавал.
В принципе, это очень просто, компонент делается в два-три клика. Тебе нужно сделать компонент-наследник TMemo.
Далее ты просто подменяешь процедуру WindowProc, т.е. процедуру, которая обрабатывает все поступившие в твой компонент оконные собщения.
Вот новая процедура:
void __fastcall TMyFormulaEdit::WndProc1(Messages::TMessage &Message)
{
if ((Message.Msg == WM_SETFOCUS)&&(ReadOnly)) return;
WndProc(Message);
}
В ней условие - если поступило сообщение WM_SETFOCUS, т.е. если фокус передается в твой компонент и в то же время установлено свойстов ReadOnly=true, то происходит выход из функции без дальнейшей обработки сообщения. Во всех других случаях это сообщение обрабатывается как обычно. Вот и все. Используешь свой компонент наряду со стандартными в своей программе.
Потрать полчаса на изучение компонентов - тебе откроются новые горизонты.
Не надо таймер, не надо HideCaret, не надо поднимать темы 6-летней давности.
Надо не давать фокуса Memo и все.