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

Вниз

WM_ACTIVATE   Найти похожие ветки 

 
andriy   (2003-09-08 13:25) [0]

У меня проблемка.
Хочу чтобы при активизации окна, активизировалась
соответствующая панель (класс TTabControl).
Для этого я написал процедуру на отловку сообщений для приложения:

procedure TfrmMain.AppOnMessage(var Msg: TMsg; var Handled: Boolean);
var Buffer: array [0..127] of Char;
begin
inherited;
GetClassName(Msg.hwnd,Buffer,SizeOf(Buffer));
if Msg.message = WM_ACTIVATE then
begin
if Buffer="TForm" then
tbcWindows.TabIndex:=tbcWindows.Tabs.IndexOfObject(TObject(Msg.hwnd));
end;
end;

Но она, конечно, не работает!
:)
В чём ошибка ламера? Или может кто подскажет иное решение проблемы?


 
Hooch   (2003-09-08 13:39) [1]

можно завестится на событие Screen.OnActiveFormChange, соответсвенно Screen.ActiveForm - активная форма


 
Игорь Шевченко   (2003-09-08 14:33) [2]

TfrmMain.OnActivate (Sender : TObject);
begin
ActiveControl := tbcWindows.TabIndex:=tbcWindows.Tabs.IndexOfObject(TObject(Handle));
end;

???


 
Игорь Шевченко   (2003-09-08 14:49) [3]

ActiveControl := надо убрать, это по ошибке набилось :)


 
andriy   (2003-09-08 15:37) [4]


> Игорь Шевченко © (08.09.03 14:49) [3]

Вы не поняли! Мне не нужно это на активизацию frmMainForm.
Я создаю разные окна (не MDI), тоесть делаю Show.
После этого создается закладка на tbcWindows (Как в Делфи компоненты размещены). Так вот, когда я делаю Change закладки, то соответсвующее окно нахожу (в Obgect заганяю Handle окна), а наоборот не выходит. Хочу, чтобы при активизации n-го окна сменивался TabIndex на "его". А ето WM_ACTIVATE что-то не канает!
Кажется описал как есть. Теперь жду ваших ответов!


 
Игорь Шевченко   (2003-09-08 15:42) [5]


> Я создаю разные окна (не MDI), тоесть делаю Show.

В создаваемом окне скажи PostMessage (tFrmMain.Handle,
WM_USER+что-то свое, Self.Handle, 0);

> а наоборот не выходит. Хочу, чтобы при активизации n-го
> окна сменивался TabIndex на "его".

А в главное форме в обработчике этого сообщения ищи TabIndex по значению wParam - IndexOfObject(TObject(Message.wParam)) и будет тебе счастье


 
andriy   (2003-09-09 15:25) [6]


> Hooch © (08.09.03 13:39) [1]

Большое спасибо, работает!

> Игорь Шевченко © (08.09.03 15:42) [5]

Я верю, что это работает, но уменя не выходит.
Если можно, маленький но информативный примерчик привести, пожалуйста!


 
Игорь Шевченко   (2003-09-09 15:43) [7]

Раз проблема решена иным способом, зачем нужен код ? :)

Смысл следующий: объявляется сообщение
const
UM_WINDOWACTIVATED = WM_USER + 666;

в главной форме объявляется его обработчик:
type
TfrmMain = ...

private
procedure UMWindowActivated (var Message : TMessage); message UM_WINDOWACTIVATED;
....
end;

в тексте обработчика активизируется нужная панель

procedure TfrmMain.UMWindowActivated (var Message : TMessage);
begin
tbcWindows.TabIndex:=tbcWindows.Tabs.IndexOfObject(TObject(Message.wParam));
end;

В любом создаваемом окне на событие FormActivate добавляется код

PostMessage(Application.MainForm.Handle, UM_WINDOWACTIVATED, Handle, 0);

Примерно так...


 
SergeySEM   (2003-09-10 11:18) [8]

Удалено модератором
Примечание: Offtopic


 
andriy   (2003-09-11 10:33) [9]


> Игорь Шевченко © (09.09.03 15:43) [7]

Большое спасибо. Мне это очень помогло.
Я создал родительскую форму и это на нее бросил.
Работает как часики.



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

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

Наверх




Память: 0.46 MB
Время: 0.033 c
9-40772
b@nz@i
2003-04-26 05:46
2003.11.13
О камере GLScene


14-42129
stud
2003-10-22 09:44
2003.11.13
где можно найти таблицу сигналов системного динамика?


3-40923
Nton
2003-10-19 15:30
2003.11.13
Подскажите как правильно записать?


3-40783
Geugenk
2003-10-26 15:22
2003.11.13
Есть какие-то свойства у Ttable которые отключают отличие значени


1-41189
SergeY-cha
2003-11-02 11:23
2003.11.13
winXp





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский