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

Вниз

Завершение программы!   Найти похожие ветки 

 
NaRuTo   (2008-01-10 18:19) [0]

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


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

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


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

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


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

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


 
Palladin ©   (2008-01-10 18:35) [4]

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


 
Dib@zol ©   (2008-01-10 18:35) [5]

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

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

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


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

Dib@zol поверь!


 
Dib@zol ©   (2008-01-10 19:03) [7]

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


 
Dib@zol ©   (2008-01-10 19:12) [8]

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


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

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


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

А вот и код:
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.


 
Dib@zol ©   (2008-01-10 20:32) [11]

> 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:34) [12]

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


 
@!!ex ©   (2008-01-10 20:35) [13]

> [10] NaRuTo   (10.01.08 20:19)

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


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

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:44) [15]

> [14] NaRuTo   (10.01.08 20:37)

Вооот.
А теперь неплохо было бы посмотреть реализацию методов FormClose и WMEndSession


 
NaRuTo   (2008-01-10 20:47) [16]

В FormClose я только указал Action:= caFree;
а вот
WMEndSession
procedure TMainForm.WMEndSession(var Msg: TWMEndSession);
begin
  if Msg.EndSession = True then
    Close();
  inherited;
end;


 
Dib@zol ©   (2008-01-10 21:23) [17]

А можно нескромный вопрос? А нафига вообще было ставить свои обработчики?

> if Msg.EndSession = True then Close();

Во-первых, постфикс " = True " это моветон. Грубо говоря, компилятор это интерпретирует как
if (Логическая_переменная = True) = True then...

итого - имеем одно лишнее сравнение, что к тому же не добавит изящества коду.

Так что впредь пиши просто:
if Логическая_переменная then...

Насчёт " = False " - ну тут уж ничего не поделаешь, разве что вместо него if not Логическая_переменная then писать. А можно и = False оставить. Без разницы.

Так. О чём бишь я? Ах да, о коде.
Чему ты удивляешься, если сам прописал "не выключаться" при приходе WM_ENDSESSION? Сам факт прихода етой мессаги означает, что нужно без разговоров выключаться! Это вам не WM_QUERYENDSESSION! Вощем, убирай обработчик EndSession"a и жЫви спокойно :) Или вразумительно объясняй, на кой чорт он тебе нужен :)


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

Она у меня и без этого обработчика не выключается. Я добавил его из Delphi World


 
@!!ex ©   (2008-01-10 21:34) [19]

> [18] NaRuTo   (10.01.08 21:32)

Application.Terminate ? ^))


 
NaRuTo   (2008-01-11 19:30) [20]

Не помогает!


 
Сергей М. ©   (2008-01-11 19:33) [21]


> Не помогает


Помыль - поможет


 
NaRuTo   (2008-01-11 19:37) [22]

Помыль поможет

Так тоже не помагает


 
{RASkov} ©   (2008-01-11 19:39) [23]

> [22] NaRuTo   (11.01.08 19:37)
> Так тоже не помагает

Попроси кого нибудь... только не на форуме, а "вживую")


 
{RASkov} ©   (2008-01-11 19:40) [24]

> [22] NaRuTo   (11.01.08 19:37)

У тебя 7 форм и все создаются "автоматом" смотри у всех вот этот обработчик OnCloseQuery...


 
Сергей М. ©   (2008-01-11 19:47) [25]

Что, даже с мылом не лезет ?


 
Dib@zol ©   (2008-01-11 19:51) [26]

Неа :(

Вощем, аффтару: выкладывай код, а мы почитаем. А также укажем где грабли :)


 
Dib@zol ©   (2008-01-11 19:52) [27]

ЗЫ только не напрямую на форум!!! Лучше на внешний файлообменник, напр на этот: http://www.webfile.ru


 
NaRuTo   (2008-01-11 19:56) [28]

Как на этом сайте та работать!


 
{RASkov} ©   (2008-01-11 19:57) [29]

> [28] NaRuTo   (11.01.08 19:56)
> Как на этом сайте та работать!

Никто не заставляет :)


 
Сергей М. ©   (2008-01-11 19:57) [30]


> NaRuTo   (11.01.08 19:56) [28]


Очком-с)


 
{RASkov} ©   (2008-01-11 19:59) [31]

> [30] Сергей М. ©   (11.01.08 19:57)

Как не культурно.... :)
Дети же.... поверят еще....


 
{RASkov} ©   (2008-01-11 20:00) [32]

А вообще +1
:)


 
Сергей М. ©   (2008-01-11 20:04) [33]


> Как не культурно


Угу.

Культурней амбразурой)


 
Dib@zol ©   (2008-01-11 21:13) [34]

Сергей сегодня, определённо, в ударе :)

ЗЫ Аффтар, аууууу! Ждём исходник!



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

Форум: "Начинающим";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.056 c
2-1198145145
vegarulez
2007-12-20 13:05
2008.02.03
Вопрос про перекодировку response (IdHTTP, Indy8->Indy10)


2-1200229743
GhoulMaster
2008-01-13 16:09
2008.02.03
событи принятия сообщени в TTcpServer


2-1200134350
AntonUSAnoV
2008-01-12 13:39
2008.02.03
как узнать существует ли файл?


15-1198847337
Jeer
2007-12-28 16:08
2008.02.03
С наступающими !


2-1199430043
Andreil
2008-01-04 10:00
2008.02.03
Вызов ДЛЛ из ЕХЕ





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