Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 15:50   #1
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию Закрыть всплывающее окно - как?

Добрый день!
В моей программе есть необходимость использования всплывающих окошек (как в qip).
Нашел такой код (создание окна):
Код:
procedure TForm1.fShowHint(Text: String; frcolor:TColor);
var H:HWND;
    Rec:TRect;
    NeededTop:integer;
    HintForm:TForm;
    HintLabel:TLabel;
    aw:hwnd;
begin

  H := FindWindow('Shell_TrayWnd', nil);
  if h=0 then exit;

  GetWindowRect(h, Rec);

  HintForm:=TForm.Create(nil);
  with HintForm do
  begin

    Width:=245;
    Height:=100;

    Color:= frcolor;
    BorderStyle:=bsNone;
    //Создаём текст
    HintLabel:=TLabel.Create(nil);
    with HintLabel do
    begin
        Parent:=HintForm;
        WordWrap:=true;
        Caption:=' '+Trim(Text)+' ';
        Align:=alClient;
        Layout:=tlCenter;
        Alignment:=taCenter;
    end;

    AlphaBlend:=true;
    AlphaBlendValue:=220;

    aw:=GetActiveWindow;
    ShowWindow(handle,SW_SHOWNOACTIVATE);
    SetActiveWindow(aw);

    Left:=Screen.Width-Width;
    Top:=Screen.Height-20;

    //Выезжаем вверх
    NeededTop:=Rec.Top-Height;
    while Top>NeededTop do
    begin
      Top:=Top-2;
      Repaint;
      ida.Sleep(10);
      ida.Process;
    end;

    ida.Sleep(2000);

    //Выезжаем вниз
    NeededTop:=Screen.Width-20;
    while Top<NeededTop do
    begin
      Top:=Top+2;
      Repaint;
      ida.Sleep(10);
      ida.Process;
    end;
    HintLabel.Free;
    Free;
  end;

end;
Но теперь возникает необходимость "закрыть" окошко при нажатии на него.
Кстати, пока окошко не "уедет" окончательно - программа отказывается закрываться.
Пытался сделать закрытие окна с помощью HintForm.Free;
но не получилось..

Прошу вашей помощи.
fezilk25 вне форума Ответить с цитированием
Старый 17.11.2010, 15:56   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Кстати, пока окошко не "уедет" окончательно - программа отказывается закрываться.
в двух циклах while поставьте проверку глобального флага закрытия и прерывайте их.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 17.11.2010, 16:03   #3
fezilk25
Форумчанин
 
Регистрация: 01.08.2010
Сообщений: 124
По умолчанию

Можно чуть подробнее? Желательно, с примером
fezilk25 вне форума Ответить с цитированием
Старый 17.11.2010, 18:01   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от fezilk25 Посмотреть сообщение
Можно чуть подробнее? Желательно, с примером
если ваш код выполняется в главном потоке, то тогда все понятно. Действительно нужно переменную, к примеру Fstop тогда как-то так
Код:
Fstop := false;
while (Top>NeededTop) or (not FStop)  do
begin
  ....
  Application.ProcessMessages;
end;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 17.11.2010, 19:22   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Или попроще - добавим немного строк в исходный код:
Код:
...
if FMain.FStop then
begin
HintForm.Free;
exit;
end;
 //Выезжаем вверх
...
Ясно, что по событию закрытия главной формы устанавливается флажок FStop=True.

Последний раз редактировалось mihali4; 17.11.2010 в 19:43.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отключить всплывающее окно? Гошик Microsoft Office Word 1 12.10.2010 21:34
Всплывающее окно manick Общие вопросы Delphi 1 13.05.2010 21:24
Всплывающее окно EdNovice Общие вопросы Delphi 2 09.07.2008 18:04
[?] Всплывающее окно как в QIP lazutov Общие вопросы Delphi 2 21.04.2008 09:12
Как закрыть окно подключения к инету dial-up? Vladimir K. Работа с сетью в Delphi 4 12.02.2008 19:13