Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.28;
Скачать: CL | DM;

Вниз

Приложение не отображается в панели задач   Найти похожие ветки 

 
AntonioPermskiy ©   (2009-05-10 09:13) [0]

Здравствуйте, мастера.

 Создаю приложение, в котором сначала появляется форма(MainForm) с 4 кнопками BtnRun, B, C, D.
 При нажатии на кнопку BtnRun выполняется код:

procedure TMainForm.BtnRunClick(Sender: TObject);
var
 lSysForm: TSysForm;
begin
 Self.Visible := False;
 lSysForm := TSysForm.Create(nil);
 try
   lSysForm.ShowModal;
 finally
   lSysForm.Free;
 end;
 Self.Close;
end;


 Основная форма(lSysForm) приложения появляется и работает, НО в панели задач приложение не отображено(добраться реально только через alt+tab).
 Подскажите, как организовать такое приложение с отображением в панели задач. Спасибо.


 
Юрий Зотов ©   (2009-05-10 17:30) [1]

Приведенный Вами код на отображение приложения в панели задач не влияет. Поэтому, если Вы не делали ничего другого, то приложение должно нормально отображаться.

Если нужно, чтобы в панели задач отображалась форма TSysForm, то заместите у нее метод CreateParams и в нем, после вызова inherited добавьте стиль WS_EX_APPWINDOW. Примеры см. в исходниках VCL.


 
AntonioPermskiy ©   (2009-05-10 18:37) [2]

Спасибо, Юрий.
 Добавил в TSysForm.Create строчку
SetWindowLong(Self.Handle, GWL_EXSTYLE, WS_EX_APPWINDOW);
 В TaskBar-е появляется закладка(кнопка).


 
Юрий Зотов ©   (2009-05-10 20:10) [3]

> AntonioPermskiy ©   (10.05.09 18:37) [2]

Это не совсем правильно. Вы проставляете стиль WS_EX_APPWINDOW, но при этом затираете остальные и поэтому могут возникнуть проблемы.
Тогда уж так:

SetWindowLong(Handle, GWL_EXSTYLE,
 GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW);


 
Германн ©   (2009-05-11 01:07) [4]


> AntonioPermskiy ©   (10.05.09 18:37) [2]
>
> Спасибо, Юрий.
>  Добавил в TSysForm.Create строчку
>

Ну а зачем в панели задач нужна именно кнопка формы "TSysForm"?
Пользователь хотел открыть приложение/документ приложения и ему было бы понятно, если бы на панели задач появилась бы кнопка самого приложения.


 
AntonioPermskiy ©   (2009-05-11 07:47) [5]


> Ну а зачем в панели задач нужна именно кнопка формы "TSysForm"


Программа работает так:
0. Открытие формы с 4 кнопками("Run", "Settings", "Help", "Exit")
 -"Run"(см.1)
 -"Settings" открывает модально форму с настройками системы
 -"Help" открывает не модально форму с хелпом
 -"Exit" он и в афри...
1. Нажав "Run" открываем главную форму системы - теперь форма с 4 кнопками не нужна
2. Если ее просто закрыть MainForm.Close, то закрывается приложение.=> Я делаю модальное появление формы системы

> procedure TMainForm.BtnRunClick(Sender: TObject);var  lSysForm:
>  TSysForm;begin  Self.Visible := False;  lSysForm := TSysForm.
> Create(nil);  try    lSysForm.ShowModal;  finally    lSysForm.
> Free;  end;  Self.Close;end;


Возможно, я изобретаю велосипед.

С удовольствием прочитаю Ваши решения для задачи.

Спасибо.


 
Anatoly Podgoretsky ©   (2009-05-11 08:51) [6]

> AntonioPermskiy  (11.05.2009 7:47:05)  [5]

Пункт 0. и все связаное с ним выбросить.


 
{RASkov} ©   (2009-05-11 09:25) [7]

> [5] AntonioPermskiy ©   (11.05.09 07:47)
> Я делаю модальное появление формы системы

Просто нужно сделать "форму системы" - главной. А форму с четырьмя кнопками не нужно делать главной, а сделать ее по типу Splash


 
AntonioPermskiy ©   (2009-05-11 12:12) [8]


> Просто нужно сделать "форму системы" - главной

Какой смысл инициализироать "форму системы"(это требует ресурсов), если пользователь зашел, чтобы только настроить, например, соединения с БД?.


 
{RASkov} ©   (2009-05-11 13:32) [9]

> [8] AntonioPermskiy ©   (11.05.09 12:12)

А и не нужно ничего инициализировать без надобности, я тебе про другое говорю.....
Главная форма создается в коде проекта первой строчкой Application.CreateForm(); Но перед этой строкой можно еще кода написать...
Повторяюсь, посмотри примеры Сплэш Окон - самое то для тебя.


 
Application   (2009-05-11 15:17) [10]

Удалено модератором
Примечание: Не путай начинающих


 
Palladin ©   (2009-05-11 15:23) [11]


> Application   (11.05.09 15:17) [10]

Через час не аргументируешь - будет удалено.


 
{RASkov} ©   (2009-05-11 17:14) [12]

Вот возможный пример. Создай новый проект и замени код проекта(*.dpr) на этот:
program Project1;
uses Forms, Windows, StdCtrls,
    Unit1 in "Unit1.pas" {Form1};

{$R *.res}
var F: TForm;
begin
 F:=TForm.Create(nil);
 with F do try
  Caption:="Параметры запуска";
  BorderStyle:=bsDialog;
  Position:=poScreenCenter;
  Width:=220; Height:=100;
  with TButton.Create(F) do begin
   Caption:="Exit";
   ModalResult:=IDCANCEL;
   Top:=20; Left:=115;
   Parent:=F;
  end;
  with TButton.Create(F) do begin
   Caption:="Start";
   ModalResult:=IDOK;
   Top:=20; Left:=20;
   Parent:=F;
  end;
  if ShowModal<>IDOK then Exit;
 finally
  Free;
 end;
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

F9

Можно для контроля инициализации главной формы(а она будет Form1) вставить в OnCreate какой-нибудь ШоуМессадж()...


 
{RASkov} ©   (2009-05-11 17:18) [13]

> [10] Application   (11.05.09 15:17)

Попробуй создать новый проект и добавить несколько форм.
Затем пробуй выбирать в опциях проекта (в IDE) главную форму и следом проверяй что делает IDE с кодом проекта, т.е. какой становится первая строчка(т.н. первый вызов Application.CreateForm). Думай, зачем делфи меняет там строки...)
Кстати обратное тоже верно.... т.е. редактирование dpr и изменения в опциях...


 
AntonioPermskiy ©   (2009-05-11 20:18) [14]


> Попробуй создать новый проект

Я уже после сообщения
> {RASkov} ©   (11.05.09 13:32) [9]
начал эксперименты с кодом dpr. Спасибо за пример и участие в решении вопрося RASkov.


 
Юрий Зотов ©   (2009-05-11 20:22) [15]

> AntonioPermskiy ©   (11.05.09 20:18) [14]

Это хорошее решение, но Help Вам тоже придется либо тоже показывать модально, либо перенести эту кнопку в SysForm.


 
AntonioPermskiy ©   (2009-05-11 20:56) [16]


>  Help Вам тоже придется либо тоже показывать модально, либо
> перенести эту кнопку в SysForm.


В SysForm-е вызов Help-а уже есть. Так как за Help отвечает одна форма(о ее стиле я еще думаю - стоит ли отображать ее в TaskBar-е), модальность не требуется.
Если уж на то пошло то Help в этой системе не настолько наворочен, чтобы так называться - через неделю буду "ваять" chm.

 Как заключение, спасибо Всем большое за участие. Увидел новую сторону  создания приложения(а пытался ведь даже через консольное - без application). Предлагаю закрыть ветку - ведь ответ на основной вопрос получен. Спасибо.



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

Текущий архив: 2009.06.28;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
15-1240433713
Юрий
2009-04-23 00:55
2009.06.28
С днем рождения ! 23 апреля 2009 четверг


3-1222945535
aykorolev
2008-10-02 15:05
2009.06.28
Разработка сетевой БД


2-1241679348
worldmen
2009-05-07 10:55
2009.06.28
Создать большое меню


2-1241774258
Alex7
2009-05-08 13:17
2009.06.28
TRANSFORM в тексте ADO, MS SQL


15-1240209257
ford
2009-04-20 10:34
2009.06.28
почитать про IFilter