![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Показ 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]Так а в чём вопрос собстна ?