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

Вниз

как нормально скрыть курсор в TEdit? (hidecaret)   Найти похожие ветки 

 
GreatMaster ©   (2002-09-26 09:46) [0]

1. Замечательная функция hidecaret не работает на OnEnter.
2. Курсор снова появляется при потере-получении контролом фокуса.
Вобщем надо чтобы как в свойстве - 1 раз указал "не показывать" он и не показывает.


 
Anatoly Podgoretsky ©   (2002-09-26 09:53) [1]

TEdit это как бы для редактирования и как то странно редактировать без каретки курсора


 
GreatMaster ©   (2002-09-26 10:30) [2]

Мне нужно перемещаться по едитам например стрелками (изменяя цвет едита в котором фокус), а при нажатии скажем ентера - появляется курсор и вперёд. Ну типа как в гриде, только гриды не подойдут - нужно именно для едитовых контролов.


 
liho26 ©   (2002-09-26 12:43) [3]

В обработчике формы OnPaint напиши следующее


procedure TForm1.FormPaint(Sender: TObject);
begin
case Edit1.Focused of
true: HideCaret(Edit1.Handle);
false: HideCaret(Edit1.Handle);
end;

case Edit2.Focused of
true: HideCaret(Edit2.Handle);
false: HideCaret(Edit2.Handle);
end;
end;



При отображении формы вывод каретки будет подавляться. А дальше уже сам давай...! ))


 
liho26 ©   (2002-09-26 12:45) [4]

Забыл сказать. Помести на форму два едита Edit1 и Edit2 Вот, вроде все...


 
GreatMaster ©   (2002-09-27 06:17) [5]

при отображении может и работает, но если кинуть на форму 2 едита и перемещаться м/у ними табом (WM_NEXTDLGCTL) - не работает.


 
GreatMaster ©   (2002-09-27 12:39) [6]

up


 
.   (2002-09-27 12:41) [7]

property>tabstop?


 
qube ©   (2002-09-27 12:45) [8]

А в чем секрет такой конструкции:
case Edit2.Focused of
true: HideCaret(Edit2.Handle);
false: HideCaret(Edit2.Handle);
end;


 
Юрий Зотов ©   (2002-09-27 14:26) [9]

> А в чем секрет такой конструкции:
> case Edit2.Focused of
> true: HideCaret(Edit2.Handle);
> false: HideCaret(Edit2.Handle);
> end;

Да, мне тоже понравилось. И до секрета я тоже не додумался. Так и не понял, не только в чем секрет, а даже и в чем вообще смысл такого "кода". Уж не говоря о кумулятивности HideCaret.


> GreatMaster © (26.09.02 10:30)
> Мне нужно перемещаться по едитам например стрелками (изменяя
> цвет едита в котором фокус),

Ну так ловите нажатия стрелок и Enter - и перемещайтесь себе на здоровье. При чем тут каретка?

KeyPreview + OnKeyDown + FindNextControl + SetFocus + Color.


 
GreatMaster ©   (2002-09-27 14:42) [10]

qube © (27.09.02 12:45)
А в чем секрет такой конструкции:
case Edit2.Focused of
true: HideCaret(Edit2.Handle);
false: HideCaret(Edit2.Handle);
end;

а это та же
HideCaret(Edit2.Handle);
только написанная профессионалом гыгыгы, а нам, любителям, сей хитрости кода не постичь )) он ещё забыл сначала обосновать возможность существования хотябы одного однозначного Edit2 в пространстве гыгыгы

., да какой табстоп? говорю же чтобы фокус ПОЛУЧАЛ, но курсора не видно.


 
GreatMaster ©   (2002-09-27 14:53) [11]

Юрий Зотов © (27.09.02 14:26)
>Ну так ловите нажатия стрелок и Enter - и перемещайтесь себе на >здоровье. При чем тут каретка?
>KeyPreview + OnKeyDown + FindNextControl + SetFocus + Color.

Я бы так и делал, будь у меня на форме пара едитов, но дело в том что их много, есть ещё не только едиты и всё это дело сидит на панели которая в скролбоксе. Дык вот гораздо удобнее и эстетичнее пользоваться такими штуками как ActiveControl, Perform(WM_NEXTDLGCTL, 0{-1}, 0) и автоматическим скроллингом, чем ручками запоминать какой контрол у нас сейчас выделен, целиком ли он виден и какой следующий/предыдущий контрол выделять при нажатии tab/shift+tab. Можно конечно всё это делать каретку и не скрывая, но тогда может уже и програмку не писать? ведь в конце концов если очень надо, то всё можно ввести и в экселе, да и нотепад парни не зря же старались делали ))

ХОЧУ СКРЫТЬ КАРЕТКУУУУУУ )


 
TTCustomDelphiMaster ©   (2002-09-27 16:21) [12]

const
WM_HideEditCaret = WM_User+1;
_HC = 0;
_SC = 1;

type
TForm1 = class(TForm)
...
procedure WMHideEditCaret(var Msg: TMessage); message WM_HideEditCaret;
...

procedure TForm1.WMHideEditCaret(var Msg: TMessage);
begin
HideCaret(Msg.WParam);
end;

procedure TForm1.Edit1Enter(Sender: TObject);
begin
postmessage(Handle, WM_HideEditCaret, TEdit(Sender).Handle, 0);
Tag := _HC;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Tag = _HC) then
if ((Key = VK_Return) or (Key = VK_Tab)) then
begin
Tag := _SC;
ShowCaret(TEdit(Sender).Handle);
end
else
Key := 0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Tag = _HC) then
Key := #0;
end;


 
GreatMaster ©   (2002-09-30 14:33) [13]

Во, другое дело! Вот это работает.
Спасибо тебе, братуха TTCustomDelphiMaster!
Сразу видно - матёрый человечище ;)



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-32019
ikivio
2002-09-14 06:30
2002.10.10
Хранение информации


1-31768
sArthur
2002-10-01 08:39
2002.10.10
Формирование отчетов в HTML и печать из TWebBrowser


6-31921
Turalyon
2002-08-09 11:36
2002.10.10
SMTP/POP3 Server


1-31699
I/O
2002-09-30 19:17
2002.10.10
Процедуры


1-31817
neodiX
2002-09-27 17:08
2002.10.10
Как узнать название всех функций в длл ке?