Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Для каждого окна своя кнопка на таскбаре / 7 сообщений из 7, страница 1 из 1
17.06.2003, 00:43
    #32183724
Dmitri Krizhanovski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
Привет всем!

Есть SDI приложение. Нужно, чтобы каждое окно имело свою кнопку на таскбаре и вело себя как отдельное приложение(или что-то подобное).

Использование следующего и подобного не решает проблему:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SetWindowLong(Application.Handle, GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);

  Application.CreateForm( TForm1, Form1 );
  SetWindowLong(Form1.Handle, GWL_EXSTYLE,GetWindowLong(Form1.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
  Form1.Show;

  Application.CreateForm( TForm1, Form1 );
  SetWindowLong(Form1.Handle, GWL_EXSTYLE,GetWindowLong(Form1.Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);
  Form1.Show;


Окна создаются и все как надо до тех пор пока не захочется свернуть первое окно - сворачивается все и нет как надо.

ИЛИ У МЕНЯ НЕ ПОЛУЧИЛОСЬ :(

Эта задача в принципе решаема?
Если да, то подскажите куда копать.
...
Рейтинг: 0 / 0
17.06.2003, 11:52
    #32184033
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
А попробуйте не указывать родителя форм, т.е.

Application.CreateForm( TForm1, nil );
...
Рейтинг: 0 / 0
17.06.2003, 13:22
    #32184218
Dmitri Krizhanovski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
to: Gold

Именно так не получиться:

> А попробуйте не указывать родителя форм, т.е.
> Application.CreateForm( TForm1, nil )

В CreateForm нельзя вторым параметром nil.

Может имелось ввиду это:
Form1 := TForm1.Create( nil );

Но это не помогает - просто за освобождение формы отвечаю я.

Вот, что у меня получаеться с используванием SetWindowLong:
1. У каждой формы своя кнопка на таскбаре. Каждая форма сворачивается и закрывается как положено, НО присутствует кнопка на таскбаре и для проекта, нажимая на которую сворачиваются все окна и ПРОПАДАЮТ кнопки форм. О!.

2. Если скрыть кнопку проекта, то первая же открытая форма становится как бы главной. Если ее закрыть - закрывается все.

3. и т.д.

Вопрос остается в силе.

Сейчас попробую в Application.MainForm динамически менять главную форму.
...
Рейтинг: 0 / 0
17.06.2003, 13:39
    #32184246
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
я бы в исходниках поковырял, как делфя создает и контролирует окна в TApplication .... т.к. на самом деле TApplication видимое окно с нулевым размером ...
я когдато чтото подобное делал - но не помню где ето все лежит ... я просто вписал чтото в forms.pas вроде ы...
...
Рейтинг: 0 / 0
17.06.2003, 19:35
    #32184757
Dmitri Krizhanovski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
Спасибо всем!

Вот, что у меня получилось!

FromMain.pas
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
unit FormMain;

interface

uses
  Windows, FormParent, Classes, Controls, StdCtrls, Forms;

type
  TfmMain = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FWins: integer;
  public
    { Public declarations }
    procedure AddWin;
    procedure DeleteWin;
  end;

var
  fmMain: TfmMain;

implementation


{$R *.dfm}

procedure TfmMain.AddWin;
begin
  Inc( FWins );
end;

procedure TfmMain.DeleteWin;
begin
  Dec( FWins );
  
  if FWins =  0  then
    Close;
end;

procedure TfmMain.FormCreate(Sender: TObject);
begin

  fmParent := TfmParent.Create( nil );
  fmParent.Show;

end;

end.


FormParent.pas
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
unit FormParent;

interface

uses
  Windows, Classes, Controls, StdCtrls, Messages, Forms;

const
  TRASH_ME = wm_user+ 1 ;

type
  TfmParent = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure TrashMe( var message: tmessage ); message TRASH_ME;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure DoClose(var Action: TCloseAction); override;
  public
    { Public declarations }
    constructor Create( AOWner: TComponent ); override;
  end;

var
  fmParent: TfmParent;

implementation

uses FormMain;

{$R *.dfm}

{ TForm1 }

procedure TfmParent.CreateParams(var Params :TCreateParams); {override;}
begin
  inherited CreateParams(Params); {CreateWindowEx}

  Params.ExStyle  := Params.ExStyle or WS_Ex_AppWindow;

  //  Что бы по Alt+Tab иконки нормальные были
  Params.WndParent:= 0 ;
  //  Params.WindowClass.style;

end;

procedure TfmParent.DoClose(var Action: TCloseAction);
begin
  PostMessage( Handle, TRASH_ME,  0 ,  0  );
end;

procedure TfmParent.TrashMe(var message: tmessage);
begin
  Free;
  fmMain.DeleteWin;
end;

procedure TfmParent.Button1Click(Sender: TObject);
begin

  fmParent := TfmParent.Create( nil );
  fmParent.Show;

end;


constructor TfmParent.Create(AOWner: TComponent);
begin
  inherited;
  fmMain.AddWin;
end;

end.


Если есть вопросы, всегда пожалуйста.
...
Рейтинг: 0 / 0
17.06.2003, 19:53
    #32184763
KirillovA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
> Dmitri Krizhanovski
СПАСИБО - ТЫ НАСТОЯЩИЙ ДРУГ...
пока вопросов нет - но оригинально ...
...
Рейтинг: 0 / 0
17.06.2003, 19:59
    #32184766
Dmitri Krizhanovski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Для каждого окна своя кнопка на таскбаре
Ой, забыл файл проекта, вот:

program ISProject;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses
  Forms,
  Windows,
  FormParent in 'FormParent.pas' {fmParent},
  FormMain in 'FormMain.pas' {fmMain};

{$R *.res}

begin
  Application.Initialize;
  SetWindowLong(Application.Handle, GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
  Application.ShowMainForm := False;
  Application.CreateForm(TfmMain, fmMain);
  Application.Run;
end.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Для каждого окна своя кнопка на таскбаре / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]