Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Завершение программы! [D7, XP]


Страницы:   1 2

NaRuTo ©   (2008-01-10 18:19:00) 

У меня возникла проблема. Программа находится в трее. Главная форма не показывается. При принудительном завершении её то есть при выполнение нажатие на кнопку она завершается, но если программа работает и вы нажимаете Завершение работы Windows она не даёт завершить работу. Я использовал
ShowWindow(Application.Handle,SW_HIDE);
Application.ShowMainForm:= False;
ShowWindow(Application.MainForm.Handle,SW_HIDE);
Помогите, если знаете!


NaRuTo   (2008-01-10 20:37:00) [21]

type
 TMainForm = class(TForm)
   PopupMenu1: TPopupMenu;
   N1: TMenuItem;
   N2: TMenuItem;
   N3: TMenuItem;
   N4: TMenuItem;
   N5: TMenuItem;
   ImageList1: TImageList;
   Timer1: TTimer;
   ListBox1: TListBox;
   Timer2: TTimer;
   procedure FormCreate(Sender: TObject);
   procedure N3Click(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure N5Click(Sender: TObject);
   procedure N1Click(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure FormDestroy(Sender: TObject);
   procedure ApplicationEvents1Minimize(Sender: TObject);
 
 private
   IconData: TNewNotifyIconData;
 procedure SysTrayIconMsgHandler(var Msg: TMessage); message TRAY_CALLBACK;
  procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
   

   procedure AddSysTrayIcon;
   procedure ShowBalloonTips(TipInfo,TipTitle: String);
   procedure DeleteSysTrayIcon;

   { Private declarations }
 public
 Destination: String;
 procedure InstallSetup(Interval: Integer; CountPath: Integer; Wallaper: array of string);
   { Public declarations }
 end;


@!!ex   (2008-01-10 20:35:00) [22]

> [10] NaRuTo   (10.01.08 20:19)

А код главной формы можно посмотреть?
Вернее не код, а описание типа TMainForm


NaRuTo   (2008-01-10 20:34:00) [23]

Думаешь поможет


Dib@zol   (2008-01-10 20:32:00) [24]

> Startup:=  Ini.ReadString('Main','Startup',Startup);
> if Startup = '' then begin
> Ini.WriteString('Main','Startup','1');
> MasterForm1.Show;
> end
> else
> Ini.WriteString('Main','Startup',Startup + '1');

Ты думаешь, что количество запусков удобнее хранить в виде длины строки, состоящей из единиц? :) Етож какая система счисления? Даж не двоичная. Однеричная! %)) А, не. там бы нули были, а не единицы... Вощем, в мемориз.

ЗЫ и процедуру проверки единичности процесса в памяти можно бы и подсократить:

...
begin
if OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex')<>0 then begin
  MessageBox(0, 'Приложение уже запущено!', 'Вот так, ога', MB_OK or MB_ICONINFORMATION);
  Exit;
end else CreateMutex(nil, false, 'MyOwnMutex');
...


NaRuTo   (2008-01-10 20:19:00) [25]

А вот и код:
program wallaper;

uses

 Forms,
 IniFiles,
 SysUtils,
 ExtCtrls,
 Classes,
 main in 'main.pas' {MainForm},
 Windows,
 master1 in 'master1.pas' {MasterForm1},
 master2 in 'master2.pas' {MasterForm2},
 master3 in 'master3.pas' {MasterForm3},
 interval in 'interval.pas' {Form1},
 wallp in 'wallp.pas' {Form2},
 Preview in 'Preview.pas' {PreviewForm};

{$R *.res}
var
Ini: TiniFile;
Startup: string;
i: integer;
Destination: String;

 HM: THandle;

function Check: boolean;
begin
 HM := OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
 Result := (HM <> 0);
 if HM = 0 then
   HM := CreateMutex(nil, false, 'MyOwnMutex');
end;

begin
 if Check then begin
 MessageBox(0,'Приложение уже запущено!','Вот так!',MB_OK or MB_ICONINFORMATION);

   Exit;
   end;
 Application.Initialize;

 Application.Title := 'Changeв Wallpaper';
 Application.CreateForm(TMainForm, MainForm);
 Application.CreateForm(TMasterForm1, MasterForm1);
 Application.CreateForm(TMasterForm2, MasterForm2);
 Application.CreateForm(TMasterForm3, MasterForm3);
 Application.CreateForm(TForm1, Form1);
 Application.CreateForm(TForm2, Form2);
 Application.CreateForm(TPreviewForm, PreviewForm);
 Application.CreateHandle;

  Destination:= ExtractFilePath(Application.ExeName);

Ini:= TIniFIle.Create(Destination + 'settings.cfg');
Startup:=  Ini.ReadString('Main','Startup',Startup);
if Startup = '' then begin
Ini.WriteString('Main','Startup','1');
MasterForm1.Show;
end
else
Ini.WriteString('Main','Startup',Startup + '1');

 Application.ShowMainForm := False;

 ShowWindow(Application.Handle,SW_HIDE);

 Application.Run;

end.


NaRuTo   (2008-01-10 20:18:00) [26]

Я прописываю эти строчки не в обрабочике onCreate, а в .dpr файле после создания главной формы


Dib@zol   (2008-01-10 19:12:00) [27]

И вообще, радуйся! Ты случайносмог сделать то, что кто-то (забыл за давностью лет) слёзно умолял сделать всю конференцию :)))


Dib@zol   (2008-01-10 19:03:00) [28]

Выложи проект целиком, или на крайняк смоделируй этот еррор на минимальном проекте. Я просто открыл делфи, и в обработчике OnCreate прописал те три строчки, что ты сюда выложил (зачем, кстати?). Винда прекрасно перезагрузилась. Или один эксперимент ещё ничего не доказывает? :)


NaRuTo   (2008-01-10 18:55:00) [29]

Dib@zol поверь!


Dib@zol   (2008-01-10 18:35:00) [30]

>если программа работает и вы нажимаете Завершение работы Windows она не даёт завершить работу.

Только из-за вот этого???
> ShowWindow(Application.Handle,SW_HIDE);
> Application.ShowMainForm:= False;
> ShowWindow(Application.MainForm.Handle,SW_HIDE);

Не верю! (с)
Нормально всё завершается. И по желанию системы, и без...
Тем более, первую и вторую строчку нужно поменять местами, а третью удалить.


Palladin   (2008-01-10 18:35:00) [31]

подика на OnCloseQuery формы что то замутил?


NaRuTo   (2008-01-10 18:33:00) [32]

Ты имеешь в виде END_SESSION


www   (2008-01-10 18:30:00) [33]

лови сообщение от винды, что она желает завершиться, рассылаемое всем активным процессам


NaRuTo   (2008-01-10 18:26:00) [34]

Никаких других функций я не ставил. Программа не может завершится по желанию системы.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо