Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсказка для неактивной формы 
:(
    Опции темы
Romero
Дата 16.9.2006, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: нет
Всего: 1



Подскажите, как показывать подсказку формы, если форма неактивна?
То есть нужно вывести обычный виндовый хинт при наведении курсора на форму.
Делал через onmouseover и THintWindow, но не знаю, как убирать подсказку при покидании курсором границ формы.

Это сообщение отредактировал(а) Romero - 16.9.2006, 09:28
PM   Вверх
Palladin
Дата 16.9.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: 3
Всего: 17



Запоминай координаты формы при активации, потом считывай координаты курсора если курсор вышел за предел то скрываеш подсказку чё сложного-то?


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Alexeis
Дата 16.9.2006, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Сделать обработчики событий
 CM_MOUSEENTER       
 CM_MOUSELEAVE       



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romero
Дата 19.9.2006, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: нет
Всего: 1



RooR, ты предлагаешь при каждом выводе подсказки проверять координаты? А если форма сдвинулась или изменила размер - снова координаты запоминать?
Кроме того в описанном мной способе есть существенное отличие от стандартной подсказки - она бегает за курсором при его передвижении в пределах формы. Это неудобно, хотелось бы просто запустить вывод обычной подсказки при наведении на форму, и пущай она сама пропадает через несколько секунд.
Если непонятно, о чем я говорю - примером будет виндовый QuickLaunch. При наведении на любой ярлык появляется хинт, НЕ ПЕРЕМЕЩАЕТСЯ за курсором при передвижении в пределах размеров значка и ИСЧЕЗАЕТ САМ при покидании пределов значка.


alexeis1, не раз писали на многих форумах об этих событиях - при резком движении мышью они не срабатывают.
PM   Вверх
Romero
Дата 24.9.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: нет
Всего: 1



Чтобы было понятнее, о чем я говорю:
Создайте форму и задайте ей hint (и showhint в true). Если навести на нее мышью - появится подсказка (именно в том месте, где был курсор при срабатывании события), которая не будет перемещаться за куросором и исчезнет после некоторого времени (до следующего срабатывания события). Если же теперь сделать форму неактивной - хинт не покажется. Вот, а хотелось бы smile

Это сообщение отредактировал(а) Romero - 24.9.2006, 08:39
PM   Вверх
Alexeis
Дата 24.9.2006, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Romero @  19.9.2006,  05:54 Найти цитируемый пост)
не раз писали на многих форумах об этих событиях - при резком движении мышью они не срабатывают. 

Да к сожалению я наблюдал такую ситуацию сам...

Есть идея
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FHookStarted : Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
 var
   JHook   : THandle;

 function JournalProc(Code, wParam: Integer; var EventStrut: TEventMsg): Integer; stdcall;
 var
   Char1: PChar;
   r : TRect;
   p1, p2 : TPoint;

 begin
   Result := CallNextHookEx(JHook, Code, wParam, Longint(@EventStrut));
   if Code < 0 then Exit;

   if Code = HC_SYSMODALON then Exit;
   if Code = HC_ACTION
   then
     if (EventStrut.message = WM_MOUSEMOVE)
     then
       begin
         R := Form1.ClientRect;
         p1 := Form1.ClientToScreen(r.TopLeft);
         p2 := Form1.ClientToScreen(r.BottomRight);
         r.TopLeft     := p1;
         r.BottomRight := p2;
         p1.X := EventStrut.paramL;
         p1.Y := EventStrut.paramH;

         if not PtInRect(r, p1)
         then
           Begin
             // здесь проверяем погашен ли хинт и если нет, то гасим
             // можно заоодно и хук здесь снять, чтоб не обрабатывать неклиентские
             //перемещения мыши
           end;
       end;
 end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  if FHookStarted then
   begin
     ShowMessage('Mouse is already being Journaled, can not restart');
     Exit;
   end;

   JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, hInstance, 0);

   if JHook > 0 then
   begin
     FHookStarted := True;
   end
   else
     ShowMessage('No Journal Hook availible');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   FHookStarted := False;
   UnhookWindowsHookEx(JHook);
   JHook := 0;
end;

end.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Romero
Дата 28.9.2006, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.6.2005

Репутация: нет
Всего: 1



Мда, нехило! Слишком сложная идея. Неужели проще нет вариантов?  smile 
PM   Вверх
Alexeis
Дата 28.9.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Romero, ну сложность заключается в том что сообщения о перемещения мыши отправляются форме только когда курсор на ней, а если мы резко дернем мышью, то курсор в один момент был на форме, вдругой исчез. В этом случае у пиложения есть неопределенность, то ли мышка не двигается, то ли она ушла с формы. В обоих случаях нет сообщений о перемещении над формой. Отсюда вывод, что нам нужны сообщения вне формы. Этот способ как раз и позволяет получить журналированые сообщения о перемещении мыши вне окна. 
Так что тут вот такие ограничения. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.