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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
15-1240247395
Интересующийся
2009-04-20 21:09
2009.06.28
Как браузер узнаёт что нужно пройти через proxy?


15-1240580067
мученик
2009-04-24 17:34
2009.06.28
php и файлы..


2-1241544934
DmitriyR
2009-05-05 21:35
2009.06.28
Перевести String в LongWord


2-1242068353
Wind
2009-05-11 22:59
2009.06.28
Сравнить содержимое двух потоков TMemoryStream


2-1241695713
Pavlov
2009-05-07 15:28
2009.06.28
Сохранить и удалить данные на жесткий диск





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