Форум: "Начинающим";
Текущий архив: 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