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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 20:38   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию Как такое сделали с окном

Есть главное окно программы. В этом окне есть кнопка. При нажатии на кнопку появляется новое окно, скорее всего
Код:
.Show;
так как можно спокойно перейти к главному. Это окно не имеет кнопки на панели задач. Если при этом открытом окне щёлкнуть где-нибудь (не в самом окне), то оно закрывается. Подобное можно увидеть в QIP, окно со смайлами. Как такое сделали?
Shouldercannon вне форума Ответить с цитированием
Старый 18.06.2010, 21:05   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Не знам как сделали в qip. Если правильно тебя понял, то предлагаю такое решение:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Form2.Showing then Form2.Hide;
end;

end.
Form2 тоже не имеет кнопки в панели задач.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 18.06.2010, 21:32   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Близко, но не то. Привязка идёт к Form1 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);

А может так и дедалось, на всех компонентах имеющихся на форме стоит событие MouseDown
Хотя замечено, если открыть окно и щёлкать по рабочему столу, то реакции никакой, если переключиться на другое приложение через панель задач (щёлкнув по кнопке), то окно исчезает, так же оно исчезает при клике по CAption программы. В QIP хитрее, там при клике по рабочему столу окно исчезает.
Shouldercannon вне форума Ответить с цитированием
Старый 18.06.2010, 22:00   #4
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Так, однако все хитро. Видимо, невнимательно прочитал твою задачу. В DRKB видел решение - как выполнить процесс, пока приложение "бездельничает". Вот ссылка на решение, но на другом сайте: http://articles.org.ru/cn/showdetail.php?cid=7253

Возникла мысль применить это решение к твоей задаче. Рабочее вроде. Но нет уверенности, что это не извращение.

Unit1:
Код:
nit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.Show;
end;

end.
Unit2:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure IdleEventHandler(Sender: TObject; var Done: Boolean);

  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

procedure TForm2.FormCreate(Sender: TObject);
begin
  Application.OnIdle := IdleEventHandler;
end;

procedure TForm2.IdleEventHandler(Sender: TObject; var Done: Boolean);
begin
  if Form2.Active = false then
    Form2.Hide;
  Done := true;
end;

{$R *.dfm}

end.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 18.06.2010, 22:24   #5
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

1. А вы не думали, что в qip может это реализовано просто на панеле?
2. А что способов в интернете как скрыть форму с панели задач уже нет?
W0LF вне форума Ответить с цитированием
Старый 18.06.2010, 22:29   #6
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Цитата:
2. А что способов в интернете как скрыть форму с панели задач уже нет?
2 W0LF - вопрос, по-моему, вовсе не в этом.
2 Shouldercannon - что-то я перестарался, выняся в Unit2 процедуру и в Unit1 эта процедура прекрасно работает.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 18.06.2010 в 22:32.
Roof вне форума Ответить с цитированием
Старый 18.06.2010, 22:33   #7
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Как ни странно, но задача выполнена . Спасибо за помощь.

Последний раз редактировалось Shouldercannon; 18.06.2010 в 22:37.
Shouldercannon вне форума Ответить с цитированием
Старый 18.06.2010, 22:37   #8
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

надо бы услышать мнение более опытных по такому решению для этой задачи. На здоровье )))
Прикрепляю исходник
Вложения
Тип файла: zip mywindow.zip (15.3 Кб, 8 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 18.06.2010 в 22:43.
Roof вне форума Ответить с цитированием
Старый 18.06.2010, 22:46   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

никто не мешает на форме, которая должна скрыться - обрабатывать if GetFocus<>0 then и вуа-ля
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.06.2010, 22:53   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если не ошибаюсь то событие OnExit формы(или сообщение WM_KILLFOCUS ловить)
врятли там панелька, сча проверим

---Добавлено---
проверил, смайлы это отдельная форма, так что все выше написал, вполне подходит
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 18.06.2010 в 22:56.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как открыть главную форму с нективным окном recod Win Api 2 22.04.2010 21:39
Как лучше узнавать, что мышь находится над окном (или частью окна)? Css Win Api 7 14.02.2010 05:45
Как узнать, перекрывается ли моё окно другим окном? Altera Win Api 10 12.12.2009 19:20
Макрос с диалоговым окном. Возможно такое? Zhiltsov Microsoft Office Excel 9 09.06.2009 14:24