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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создать окно и не передавать ему фокус, Окно не должно получить фокус при создан 
:(
    Опции темы
Dimich
Дата 4.1.2005, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот такое хотел сделать, выручайте:
Работает моя программа в фоне и по определенному событию создает форму и выводит ее на экран. Хотелось бы сделать так, чтобы в этот момент (при показе формы) она не получала фокуса, а юзер мог продолжать работу с прежней программой как будто ничего не произошло (т.е. прежняя программа в этот момент не теряла фокуса), а сделать окно моей программы активным он мог позже (если ему это будет нужным). Думаю понятно изложил? Помогите пожалуйста - подкиньте идею!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Snowy
Дата 4.1.2005, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Form1.visible=false в OnCreate. И будет тебе щастя.
PM MAIL   Вверх
Dimich
Дата 4.1.2005, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Snowy @ 4.1.2005, 16:19)
Form1.visible=false в OnCreate

это чтобы она не была видна? А мне то надо чтобы видна была....
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Akella
Дата 4.1.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



в событии OnShow пиши
Код

 ShowWindow(MyForm.Handle,SW_SHOWNOACTIVATE)

сейчас сам попробую
Добавлено @ 16:47
получилось smile smile smile

Это сообщение отредактировал(а) dsergey - 4.1.2005, 16:46
PM MAIL   Вверх
Dimich
Дата 4.1.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Большое спасибо!!!
Вот только интересно - если ее так показывать, то закрыть ее потом крестиком нельзя. Приходится писать:
Код

procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
end;
Почему так?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Akella
Дата 4.1.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



можно, почему нельзя smile
первый клик - активация окна (получение фокуса ввода), ведь оно не активно
второй клик, если по крестику, то уже закрытие окна
попробуй

можешь установить таймер на 35 сек например.
PM MAIL   Вверх
Dimich
Дата 4.1.2005, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Просто так не получается! А Вы сами пробовали?
......я уже новое приложение создал (думал в моем что-то заглючилось) с двумя формами, на первое кинул кнопку, написал:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE);
end;

- вот и весь код, в свойствах вообще ничего не трогал!

...работает отлично (за что еще раз спасибо), а вот закрыть Form2 не получается - только если написать так:
Код
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

в общем я на это ессесно согласен, просто интересно - почему?
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Snowy
Дата 5.1.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А такой вариант:
Установить свойство FormStyle в fsStayOnTop.
В OnShow дать Application Minimize;
Окно неактивно, но с другим эффектом. И закрывается без проблем.
Я так делал всплывающие сообщения из буковок без фона.
И все видно, и не мешает, если вдруг текст набирал.

Это сообщение отредактировал(а) Snowy - 5.1.2005, 11:10
PM MAIL   Вверх
Akella
  Дата 5.1.2005, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



еще раз

событии OnShow пиши

ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE)

а форму открывай как обычно
Код

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 form2.Show
end;


Это сообщение отредактировал(а) dsergey - 5.1.2005, 11:15
PM MAIL   Вверх
Snowy
Дата 5.1.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А зачем же еще раз. И так всем уже все понятно. Я просто предложил еще один вариант.
Цитата

ShowWindow(MyForm.Handle,SW_SHOWNOACTIVATE)

ну зачем же так конкретно?
ShowWindow(Handle,SW_SHOWNOACTIVATE)
и все. Форма и так подразумевается, если уж это ее OnShow.
PM MAIL   Вверх
Akella
Дата 5.1.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Цитата
А зачем же еще раз. И так всем уже все понятно


Dimich`у не понятно

событии OnShow формы Form2 пиши

ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE)
Код

а форму открывай как обычно

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form2.Show
end;







PM MAIL   Вверх
Dimich
Дата 6.1.2005, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Блин, то ли лыжи не едут, то ли я....... Короче, не получается.
Вот так я открываю вторую форму:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 Form2.Show;
end;


Вот что из себя предствляет вторая форма:
Код
...
 TForm2 = class(TForm)
   procedure MyOnShow(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private
...

procedure TForm2.MyOnShow (Sender: TObject);
begin
 ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
 Form2.OnShow := MyOnShow;
end;

Открывается и получает фокус.
Или я чего то не понял, dsergey?

З.Ы. Наверное еще от встречи Нового года не отошел.......
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Snowy
Дата 6.1.2005, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Если из одной формы вызываешь другую без фокуса-покуса, то так:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE);
end;

P.S. Да, забыл добавить. Это все. Никакие OnShow здесь не нужны. В OnShow нужно писать только для главной формы. Для остальных просто вместо FormX.Show юзай эту конструкцию.

Это сообщение отредактировал(а) Snowy - 6.1.2005, 09:21
PM MAIL   Вверх
Dimich
Дата 6.1.2005, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Блин, ну да, конечно! Если это главная форма, то
Код
 ShowWindow (Form2.Handle,SW_SHOWNOACTIVATE);
решает все проблемы....
Однако речь шла о том, что из формы1 надо вызвать(показать) форму2 и не передавать ей фокус. Вот тут засада и была! Я ее решил теперь, немного по другому:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
 h : hwnd;
begin
 h := GetActiveWindow;
 Form2.Show;
 SetActiveWindow (h);
end;

.....хотя непонятно, почему dsergey аж несколько раз повторял свой код? Ведь не работает!
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Akella
Дата 6.1.2005, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а это зачем smile
Код

procedure TForm2.MyOnShow (Sender: TObject);
begin
ShowWindow(Form2.Handle,SW_SHOWNOACTIVATE);
end;


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

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

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

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

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


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

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


 




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


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

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