Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

Активация предыдущего окна   Найти похожие ветки 

 
pushkin42 ©   (2008-11-06 10:33) [0]

Есть код

procedure TTableFormTmpl.FormHide(Sender: TObject);
var wnd : hwnd;
   buff: array [0..127] of char;
   I: Integer;
begin
 wnd := getwindow(application.handle, gw_hwndfirst);
 while wnd <> 0 do begin
   if (
   (getwindowtext(wnd, buff, sizeof(buff)) <> 0)
   and
   (IsWindowVisible(wnd))
   and
   (getwindow(wnd, gw_owner) <> 0)
   and
   (wnd<>handle)
   and
   (wnd<>findwindow("TcfmDesktop", nil))
   )

   then begin
     for I := 0 to Screen.FormCount-1 do begin
       if Screen.Forms[I].Handle=wnd then begin
         ActiveFormOverride := nil;
         SetActiveWindow(FindWindow("TcfmDesktop", nil));
         Screen.Forms[I].OnActivate(Screen.Forms[I]);
         SetActiveWindow(wnd);
         Break;
       end;
     end;
   end;
   wnd := getwindow(wnd, gw_hwndnext);
 end;

 ActiveFormOverride := nil;
end;


Так вот, предыдущее окно ищется, становится активным, но при этом в статусной строке не отображается имя окна, как если бы мы щелкнули по заголовку окна, статус тут же сменился бы на имя активного окна. Здесь же активация окна происходит, но статус не меняется...

При этом если перед SetActiveWindow поместить ShowMessage с каким-нибудь текстом, то все проходит нормально - появляется сообщение, жму OK, окно активируется, статус пишется...

Что здесь не так?


 
Vlad Oshin ©   (2008-11-06 11:24) [1]

А чего так сложно?

Screen.ActiveForm
   Это свойство возвращает объект TForm, имеющий фокус ввода. Если приложение неактивно, свойство указывает, какая именно форма будет иметь фокус ввода при активизации приложения.

Запоминаем его постоянно, если надо предыдущее, просто смотрим запомненное


 
pushkin42 ©   (2008-11-06 11:27) [2]

Дело в том, что кроме "нужных" форм есть ещё формы-фейки. Screen.ActiveForm и есть ActiveFormOverride, но при этом ещё есть формы, которые мне не нужно трактовать как "моя-форма-которая-должна-уйти-в-статус". И интерес не в том, КАК определить активную форму, а в том, почему эта самая форма при программной ее активации на самом деле, видимо, не активируется...


 
Vlad Oshin ©   (2008-11-06 12:01) [3]

а если воткнуть что-то вроде
(screen.Forms[i] as TcfmDesktop).Activate
?


 
pushkin42 ©   (2008-11-06 12:05) [4]

Неа. Фокус снимается теперь вообще с "нижней" формы...


 
Vlad Oshin ©   (2008-11-06 13:12) [5]

а если что-то вроде такого

 TCF=class(tCustomForm);

var
 Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
i:integer;
begin
for I := 0 to Screen.FormCount - 1 do
begin
  if (screen.Forms[i].ClassName = "TForm1") then
  begin
    screen.Forms[i].BringToFront;
    TCF(screen.Forms[i]).Activate;
  end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
15-1223466254
KSergey
2008-10-08 15:44
2008.12.14
Расскажите мне про Windows-домен


15-1223446300
Дуб
2008-10-08 10:11
2008.12.14
IE 7 Apach и далее


3-1210838639
grav
2008-05-15 12:03
2008.12.14
Упорядочение по возрастанию в IBTable


3-1211258383
Вася
2008-05-20 08:39
2008.12.14
Вложеные запросы


6-1196592064
Fixi4eeG
2007-12-02 13:41
2008.12.14
Отправка данных методом POST через IdHTTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский