Форум: "Основная";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Внизмассив форм Найти похожие ветки
← →
andry1981 (2006-10-21 22:39) [0]Здравствуйте, уважаемые!
Краткое введение: есть 2 формы - Form1(основная) и Form2.
Form2 используется в таком виде:
type
wind=record
win:TForm2;
...
end;
var windows:array[1..500] of wind;
Создание массива форм windows[i] происходит сл.образом:
windows[i].win:=TForm2.Create(self);
with windows[i].win do
begin
windowstate:=wsminimized;
windows[i].win.Show;
Caption:="...";
windows[i].win.flash.Enabled:=true;
end;
где
windows[i].win.flash.Enabled:=true; - вызывает таймер, который должен заставлять мигать иконку формы windows[i].win на панели задач.
Мигание по таймеру описано в следующем виде:
if flash.Tag = 0 then
begin
FlashWindow(Form2.Handle,True);
flash.Tag:=1;
end
else
begin
FlashWindow(Form2.Handle,False);
flash.Tag:=0;
end;
А теперь собственно вопросы:
1) После создания массива форм windows[i].win или любой одно такой формы,я пытаюсь скрыть основную форму Form1, но если активна любая из созданных форм, то Form1 будет также активна. Как её скрыть таким образом чтобы оставались только формы windows[i].win ?
2) У созданной формы должна мигать иконка на панели задач, но она не мигает. Если вместо Form2.Handle поставить Application.Handle, то начинает мигать Form1, которая как я подчеркнул в 1-м вопросе - никуда не девается и вечно висит рядом с новыми созданными формами. Что не так?
Пробовал описывать процедуру для формы Form2:
procedure TPrivat.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle:=Params.ExStyle or WS_EX_OVERLAPPEDWINDOW;
end;
Не помогает.
Что посоветуете?
Заранее спасибо за ответы!
← →
@!!ex © (2006-10-21 23:05) [1]WinAPI.
CreateWindow
← →
andry1981 (2006-10-21 23:34) [2]Но у меня слишком сложная форма с кучей компонентов на ней.
← →
@!!ex © (2006-10-22 09:59) [3]В плане VCL я ламер полный.....
Поэтому не смогу наверно ничего умного сказать....
В DLL форму засунуть? Тогда она не так связана с Апликейшеном вроде.
← →
Leonid Troyanovsky © (2006-10-22 10:50) [4]
> andry1981 (21.10.06 22:39)
> Form2 используется в таком виде:
> type
> wind=record
> win:TForm2;
> ...
> end;
Обычно делают так:
type TForm2 = class(TFormX)
..
end;
т.е., вся необходимая информация включается в класс формы в
виде полей (свойств).
Кроме того, для того, чтобы безопасно пользоваться ссылками на
формы из массива windows (не очень удачное имя), нужны доп. усилия.
Проще же воспользоваться уже готовым массивом Screen.Forms.
По поводу всего остального сказать ч.-л. сложно, бо
изложено сумбурно.
--
Regards, LVT.
← →
andry1981 (2006-10-22 13:41) [5]Leonid Troyanovsky, по поводу сумбурности, поясняю: есть форма Form2, которая у меня визуально посмотрена с множеством компонентов и т.д. Я включаю описание формы в запись wind, которая используется для описания массива окон на основе этой формы. У меня есть подозрение что при создании windows[i].win:=TForm2.Create(self) - происходит что-то не совсем для меня подходящее, а именно форма зависит от первоначальной Form1..Может быть стоит расписать флаги создания формы?! Или посоветуете как это сделать с помощью WinAPI опять таки с привязкой к описанной мною Form2.
И что по поводу мигания иконки?
← →
Percent (2006-10-22 14:00) [6]которая у меня визуально посмотрена с множеством компонентов
Непонятно...
Я включаю описание формы в запись wind
Непонятно и неочевидно...
запись wind, которая используется для описания массива окон на основе этой формы
Запись - для описания массива? Это как? Ты что-то загадочное делаешь...
TForm2.Create(self)
TForm2.Create(Application)?
Может быть стоит расписать флаги создания формы?!
Форма с флагами? :-)
как это сделать с помощью WinAPI опять таки с привязкой к описанной мною Form2.
Формы не создаются напрямую с помощью WinAPI. Создание формы инкапсулировано в классе TCustomForm. Если же использовать WinAPI, то это будут уже не формы, а окна.
И что по поводу мигания иконки?
"Мигание по таймеру описано в следующем виде" (С)
FlashWindow(Application.Handle, True); {и больше ничего; интервал таймера - 500 мсек}
У меня мигает иконка. Что я делаю не так?
← →
andry1981 (2006-10-22 14:33) [7]Хорошо, вот я сделал простой пример. Создал 2 формы на каждой из которых есть по 1-й кнопке
Form1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
end.
Form2:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.ExStyle:=Params.ExStyle or WS_EX_APPWINDOW;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Hide;
end;
end.
Я нажимаю на кнопку первой формы и Form2 становится видимой...WS_EX_APPWINDOW делает ее видимой на панели задач в виде иконки. Т.е. на данную секунду мы имеем 2 иконки на панели задач - иконку приложения и иконку формы...Теперь я жму на кнопку на Form2 и все что я хочу - скрыть иконку приложения на панели задач. Form1 исчезает, но на панели задач по прежнему висит 2 иконки...Как мне убрать первую иконку и оставить только икоку 2-й формы????
← →
@!!ex © (2006-10-22 14:39) [8]ShowWindow(Application.Handle,SW_HIDE);
← →
andry1981 (2006-10-22 14:53) [9]Спасибо! Помогло!
← →
andry1981 (2006-10-22 17:14) [10]вопрос в догонку - как создать окно таким образом чтобы оно не стало активным и на него не перешел фокус? Т.е. Form2 создается в тот момент, когда я работаю с Form1 и первая форма теряет фокус, даже если Form2 я делаю windowstate:=wsminimized.
← →
Leonid Troyanovsky © (2006-10-22 18:13) [11]
> andry1981 (22.10.06 17:14) [10]
> вопрос в догонку - как создать окно таким образом чтобы
> оно не стало активным и на
procedure TFormX.ShowNA;
begin
ShowWindow(Handle, SW_SHOWNA);
Visible := True;
end;
--
Regards, LVT.l
← →
andry1981 (2006-10-22 18:38) [12]спасибо!!!
← →
andry1981 (2006-10-22 19:58) [13]спасибо!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.067 c