Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Показ hint-а вручную


товарищ вася ©   (2009-05-18 10:49:00) 

Ещё раз всех приветствую! Показываю вручную hint
procedure TForm1.MyShowHint(var HintStr: String; var CanShow: Boolean;
 var HintInfo: THintInfo);
var
 j:integer; p: TPoint;
begin
 if not (HintInfo.HintControl is TRichEdit) then Exit;
 HintInfo.HintColor := clCream;
 HintInfo.HideTimeout:=5000;
 GetCaretPos(p);
 p := RichEdit1.ClientToScreen(p);
 HintInfo.HintPos := p;
end;

ОнФормКриэйт :
Application.OnShowHint:=MyShowHint;
 Application.HintPause:=1;
 Application.HintHidePause:=3000;

собсна вот для чего всё вышесказанное было нужно:

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var i,j,line,count,z:integer; buff,code:string;slashpos:integer;
begin
 h:=nil;
 if (key=vk_left) or (key=vk_right) or (key=VK_UP) or (key=VK_DOWN) or (Key=VK_HOME) or (key=vk_end) then
  begin
     ShowHnt;
     RichEdit1.SetFocus;
 end;
end;


procedure TForm1.ShowHnt;
var i,j,line,count,z:integer; buff,code:string;slashpos:integer;
begin
    count:=0;  RichEdit1.Hint:='';
     line:=RichEdit1.CaretPos.Y;
     slashpos:=RichEdit1.CaretPos.X;
     buff:=richedit1.Lines.Strings[line];
     for i:=slashpos downto 1 do
     if buff[i]='\' then inc(count);
     slashpos:=0;
     i:=RichEdit1.CaretPos.X+1;
     while (length(buff)0) and (i > 0) and (buff[i] '\') do Dec(i);
     j := RichEdit1.CaretPos.x+1;
     while (j


Anatoly Podgoretsky   (2009-05-18 11:45:00) [1]

> товарищ вася  (18.05.2009 11:27:02)  [2]

Это по сути PT, но суть шире.


brother   (2009-05-18 11:33:00) [2]

> в чем фишка?

сбросс мышиных сообщений?


товарищ вася   (2009-05-18 11:27:00) [3]


> Так а в чём вопрос собстна ?

Если поменять код на такой:
procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i,j,line,count,z:integer; buff,code:string;slashpos:integer;pt:TPOint;
begin
h:=nil;
if (key=vk_left) or (key=vk_right) or (key=VK_UP) or (key=VK_DOWN) or (Key=VK_HOME) or (key=vk_end) then
 begin
    GetCursorPos(pt);
    SetCursorPos(pt.x,pt.y)
    ShowHnt;
    RichEdit1.SetFocus;
end;
end;
то подсказку показывает  всегда и везде
А теперь вопрос что делают эти две строки такого что все заработало?
    GetCursorPos(pt);
    SetCursorPos(pt.x,pt.y)

ведь поидее результат тот же самый курсор на том же месте...
по сути я  y:=y...
в чем фишка?


Товарищ Маузер   (2009-05-18 11:16:00) [4]

Так а в чём вопрос собстна ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо