Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

как нормально скрыть курсор в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
4-32076
hovl
2002-07-27 18:21
2002.10.10
Mail sender


1-31832
davyd
2002-09-24 23:13
2002.10.10
Запустить программу до ввода логина


1-31678
Андреев Павел
2002-09-30 14:42
2002.10.10
пустые properties


1-31872
yur78
2002-09-28 20:40
2002.10.10
Как программно прокрутить StringGrid


1-31712
ivlex
2002-10-01 08:38
2002.10.10
О ComboBox и проверке дат





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский