Кнопку формы в панельку

  • Автор темы stalker780
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

stalker780

#1
procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowLong(handle, GWL_EXSTYLE, (GetWindowLong(handle, GWL_EXSTYLE) or WS_EX_APPWINDOW));
end;

Добавляем кнопку на панельку, но потом я не могу вернуться на глвную форму - она не активизируется.
Как можно обойти эту проблему?

Надо сделать что-то типа форм в TheBat "Прием почты" и "Редактирование сообщений", там они работают нормально.
 

admin

Well-known member
08.08.2003
2 754
0
#2
stalker780
Что значит?
Добавляем кнопку на панельку, но потом я не могу вернуться на глвную форму - она не активизируется.
всё активизируется. только при минимизации окна кнопка исчезает и всё. Поясни более конкретно что не активизируется и в каком случае?
 
S

stalker780

#3
Сори, не правильно изложил <_<
Конкретнее:
Есть проект с 2-мя формами (Form1 и Form2 и т.д.).
При запуске приложения создается только Form1.
На Form1 есть Button1.
Button1 создет Form2 и отображает ее.
На создание Form2 стоит вышеуказанная процедура.

1. Мы запускаем приложение, в таскбаре появляется кнопка приложения (она же главной формы Form1).
2. Кликаем на Button1
3. Создается Form2 и выводится в таскбар.
4. При попытке сделать Form1 активным нажатием на кнопку в таскбаре мы не получаем нифига.

Вот...

Мораль:
Нажатие на кнопку приложения в таскбаре активизирует приложение, но НЕ главную форму, поскольку активная форма приложения уже есть.

Цель:
1. Надо сделать, чтобы нажатие на таскбаре на кнопку приложения активизировало не только приложение, но и главную форму.
2. Чтобы при сворачивании приложения (главной формы Form1) кнопки других форм не прятались.
3. Чтобы все это было в одном приложении.
 

admin

Well-known member
08.08.2003
2 754
0
#4
stalker780
Брр. Жаль. Ухожу чейчас. Завтра гляну что там такое у тебя.
 
S

Sir Alex

#5
2 Stalker780
Вот выдержка из MSDN:
Managing Taskbar Buttons
The Shell creates a button on the taskbar whenever an application creates a window that isn't owned. To ensure that the window button is placed on the taskbar, create an unowned window with the WS_EX_APPWINDOW extended style. To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style. As an alternative, you can create a hidden window and make this hidden window the owner of your visible window
Другими словами нам надо создать окно без родителя:
открываем юнит со второй формой, в секцию interface добавляем:
Код:
  protected
   procedure CreateParams(var Params: TCreateParams); override;
в секцию implementation, добавляем:

Код:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WndParent:=0;
end;
И все, никаких SetWindowLong использовать не надо.

Успехов!
 
S

stalker780

#6
Sir Alex
Это уже больше похоже на то, что мне надо, но здесь еще один глюк вылез.

При сворачивании главной формы приложения, в таскбаре пропадает ее кнопка вообще и развернуть соответственно я ее уже не могу :(

Пробовал проделать с Form1 ту же процедуру + скрыть кнопку аппликухи вот так:
program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

var
ExtendedStyle : integer;

begin
Application.Initialize;
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE); SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Но тогда я главную форму вообще не могу свернуть :)
 
G

Guest

#7
2 stalker780
Это уже больше похоже на то, что мне надо, но здесь еще один глюк вылез.

При сворачивании главной формы приложения, в таскбаре пропадает ее кнопка вообще и развернуть соответственно я ее уже не могу :)
Нифига не понял.... То, что я тебе написал, работает как часы! Посмотри у себя код, может ты какие-то лишние команды выполняешь. У меня и главная форма и Form2 сворачиваются/разворачиваются без проблем.
 
S

stalker780

#9
Нифига не понял.... То, что я тебе написал, работает как часы! Посмотри у себя код, может ты какие-то лишние команды выполняешь. У меня и главная форма и Form2 сворачиваются/разворачиваются без проблем.
Только что попробовал на голом проекте, вроде работает... Наверно правда, я намутил что-то, а может компоненты, которыя я юзаю...

Но в любом случае спасибо, буду разбираться дальше.
 
Статус
Закрыто для дальнейших ответов.