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

Поиск:

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


Шустрый
*


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

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



При запуске проги она оказывается не в фокусе (из-за мсжбокса).
Код

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MessageBox('Hallo, Vingrad!',':-)');
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Но если заюзать 
Код

MessageBox(Application.Handle,'Hallo, Vingrad!',':-)',MB_OK);

или сначала показать какую-нить форму, то работает нормально. Почему так?
PM   Вверх
Yanis
Дата 25.6.2007, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Злоумышленник @  24.6.2007,  23:54 Найти цитируемый пост)
При запуске проги она оказывается не в фокусе (из-за мсжбокса).

У меня всё нормально. Фокус попадает на главную форму, как и должно быть.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
STFN
Дата 7.8.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тут оставляем все как есть...

Код

...
{$R *.res}

begin
  Application.Initialize;
  Application.MessageBox('Hallo, Vingrad!',':-)');
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.




а главной форме в событие OnActivate пишем....

Код

procedure TForm1.FormActivate(Sender: TObject);
begin
  Application.BringToFront; 
end;


все smile
PM MAIL ICQ Jabber   Вверх
MetalFan
Дата 7.8.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(STFN @  7.8.2007,  19:06 Найти цитируемый пост)
в событие OnActivate пишем

а ничего, что OnActivate возникнет при передаче фокуса ввода форме... зачем тогда лишние телодвижения то?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
STFN
Дата 7.8.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

а ничего, что OnActivate возникнет при передаче фокуса ввода форме... зачем тогда лишние телодвижения то?


у меня работает только такой способ. иначе фокус на форму не попадает. проверял на Delphi 7, система winxp sp2.
PM MAIL ICQ Jabber   Вверх
Sunvas
Дата 8.8.2007, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: 28
Всего: 89



Цитата(Злоумышленник @  24.6.2007,  22:54 Найти цитируемый пост)
Почему так?

Чтобы понять почему так, нужно посмотреть, как устроен Application.MessageBox. Вот код.
Код

function TApplication.MessageBox(const Text, Caption: PChar; Flags: Longint): Integer;
var
  ActiveWindow: HWnd;
  WindowList: Pointer;
  MBMonitor, AppMonitor: HMonitor;
  MonInfo: TMonitorInfo;
  Rect: TRect;
  FocusState: TFocusState;
begin
  ActiveWindow := GetActiveWindow; //<--Обратите внимание на эту строку
  MBMonitor := MonitorFromWindow(ActiveWindow, MONITOR_DEFAULTTONEAREST);
  AppMonitor := MonitorFromWindow(Handle, MONITOR_DEFAULTTONEAREST);
  if MBMonitor <> AppMonitor then
  begin
    MonInfo.cbSize := Sizeof(TMonitorInfo);
    GetMonitorInfo(MBMonitor, @MonInfo);
    GetWindowRect(Handle, Rect);
    SetWindowPos(Handle, 0,
      MonInfo.rcMonitor.Left + ((MonInfo.rcMonitor.Right - MonInfo.rcMonitor.Left) div 2),
      MonInfo.rcMonitor.Top + ((MonInfo.rcMonitor.Bottom - MonInfo.rcMonitor.Top) div 2),
      0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
  end;
  WindowList := DisableTaskWindows(0);
  FocusState := SaveFocusState;
  if UseRightToLeftReading then Flags := Flags or MB_RTLREADING;
  try
    Result := Windows.MessageBox(Handle, Text, Caption, Flags);
  finally
    if MBMonitor <> AppMonitor then
      SetWindowPos(Handle, 0,
        Rect.Left + ((Rect.Right - Rect.Left) div 2),
        Rect.Top + ((Rect.Bottom - Rect.Top) div 2),
        0, 0, SWP_NOACTIVATE or SWP_NOREDRAW or SWP_NOSIZE or SWP_NOZORDER);
    EnableTaskWindows(WindowList);
    SetActiveWindow(ActiveWindow); //<--И на эту строку
    RestoreFocusState(FocusState);
  end;
end;


Строки, на которые стоит посмотреть, я выделил.


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

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

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

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

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


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

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


 




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


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

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