Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 13:28   #1
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию Ошибка при закрытии программы

Написал программу, но при закрытии выскакивает ошибка (на скрине)
где 1111111111111 там при закрытии
Код:
form4.close;
form4 основная форма, 222222222 после нажатия continue

Код самой программы (основной формы)

Код:
unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, OleCtrls, SHDocVw, XPMan, ShellAnimations,
  IdCookieManager, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, ShellAPI, Menus, ImgList,
  GIFImg;

type
  TForm4 = class(TForm)
    Image1: TImage;
    WebBrowser1: TWebBrowser;
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    IdCookieManager1: TIdCookieManager;
    TrayIcon1: TTrayIcon;
    ShellResources1: TShellResources;
    XPManifest1: TXPManifest;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Timer1: TTimer;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    ImageList1: TImageList;
    Image2: TImage;
    Image3: TImage;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure TrayIcon1DblClick(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

uses Unit1, Unit2;

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate('http://pogoda.gb7.ru/');
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
Application.ProcessMessages;
form1.Button1.Click;
sleep(100);
WebBrowser1.Refresh;
end;

procedure TForm4.Button3Click(Sender: TObject);
begin
form2.ShowModal;
end;

procedure TForm4.Button4Click(Sender: TObject);
begin
ShellExecute(Handle, nil, 'http://tobolsk.clan.su/', nil, nil, SW_SHOWNORMAL);
end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form4.close;
form1.Close;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
WebBrowser1.Navigate('http://pogoda.gb7.ru/');
end;

procedure TForm4.N10Click(Sender: TObject);
begin
form4.Close;
end;

procedure TForm4.N1Click(Sender: TObject);
begin
Button3.Click;
end;

procedure TForm4.N3Click(Sender: TObject);
begin
show;
end;

procedure TForm4.N4Click(Sender: TObject);
begin
hide;
end;

procedure TForm4.N6Click(Sender: TObject);
begin
ShellExecute(Handle, nil, 'http://tobolsk.clan.su/', nil,nil, SW_SHOWNORMAL);
end;

procedure TForm4.N8Click(Sender: TObject);
begin
Button2.Click;
end;

procedure TForm4.Timer1Timer(Sender: TObject);
begin
form4.Caption:='Погода в Тобольске 2011 ver. 1.1   '+timetostr(gettime);
Label1.Caption:=DateToStr(date);
Label2.Caption:=TimeToStr(gettime);
end;

procedure TForm4.TrayIcon1DblClick(Sender: TObject);
begin
if Visible=true then
hide
else
Show;
end;

procedure TForm4.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
hide
else
inherited;
end;

end.
Изображения
Тип файла: jpg 111111111111111111111111111111.JPG (129.6 Кб, 142 просмотров)
Тип файла: jpg 22222222222222222222222222.JPG (136.9 Кб, 136 просмотров)
cargo29 вне форума Ответить с цитированием
Старый 17.05.2011, 14:59   #2
Winnerer
Пользователь
 
Аватар для Winnerer
 
Регистрация: 13.05.2011
Сообщений: 16
По умолчанию

Код:
else
inherited;
вы хоть почитайте для начала для чего служит эта волшебная команда.

[offtop]
Код:
ver. 1.1
что-то не похоже

Код:
if Visible=true then
hide
else
Show;
фокус
Код:
visible:=not visible;
Оформление кода - ужас [/offtop]
[ferox]
Winnerer вне форума Ответить с цитированием
Старый 17.05.2011, 15:42   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Код:
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form4.close;
Что, по-вашему, это делает?
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 17.05.2011, 16:08   #4
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Код:
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form4.close;
Что, по-вашему, это делает?
Убило!
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 17.05.2011, 17:37   #5
art-programs
Пользователь
 
Регистрация: 04.07.2009
Сообщений: 61
По умолчанию

Код:
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form4.close;
form1.Close;
end;
так программа реально лучше закрывается )))
особенно с учётом того что form4 - главная форма)))
art-programs вне форума Ответить с цитированием
Старый 17.05.2011, 17:42   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ошибка у ТС вот где:
Код:
procedure TForm4.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
hide
else
inherited;
end;
Тут 2 ошибки:
1.
Зачем else?
Вы сами хотите обработать команду и передать сообщение далее по цепочке сообщений?

Программа зависает в этом куске кода т.к. получает WM_SYSCOMMAND, но так как там нет вызова inherited ни обработки SC_CLOSE,SC_MINIMIZE и.т.д, то ожидает у моря погоды.. ой того что программист сам обработает эти собщения сам.

Вызов inherited; обязателен в случае если вы сами не обработываете все эти сообщения. Иначе программа повиснет в этом куске кода, в случае если не найдет обработки посланного окну сообщения.

2.
Второе это надо смотреть не CmdType, а wParam.

Вот как должно все вылядеть:
Код:
procedure TForm4.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.wParam = SC_MINIMIZE then
     begin
        hide;
     end;
   inherited;
end;

Последний раз редактировалось Человек_Борща; 17.05.2011 в 17:49.
Человек_Борща вне форума Ответить с цитированием
Старый 17.05.2011, 19:09   #7
cargo29
Форумчанин
 
Регистрация: 13.12.2010
Сообщений: 603
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ошибка у ТС вот где:
Код:
procedure TForm4.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
hide
else
inherited;
end;
Тут 2 ошибки:
1.
Зачем else?
Вы сами хотите обработать команду и передать сообщение далее по цепочке сообщений?

Программа зависает в этом куске кода т.к. получает WM_SYSCOMMAND, но так как там нет вызова inherited ни обработки SC_CLOSE,SC_MINIMIZE и.т.д, то ожидает у моря погоды.. ой того что программист сам обработает эти собщения сам.

Вызов inherited; обязателен в случае если вы сами не обработываете все эти сообщения. Иначе программа повиснет в этом куске кода, в случае если не найдет обработки посланного окну сообщения.

2.
Второе это надо смотреть не CmdType, а wParam.

Вот как должно все вылядеть:
Код:
procedure TForm4.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.wParam = SC_MINIMIZE then
     begin
        hide;
     end;
   inherited;
end;
На счет этого спасибо учту, но оно работает всегда )))

и повторяю для остальных ПРИ ЗАКРЫТИИ!!!!!!!!!!!!!!! ОСТАЛЬНОЕ РАБОТАЕТ!!!!!!!!!!!!
ДАЖЕ ЭТО!
Код:
if Visible=true then
hide
else
Show;
Тема закрыта, ошибку нашел сам!
перенес закрытие форм в событие где уничтожается форма.
cargo29 вне форума Ответить с цитированием
Старый 17.05.2011, 19:15   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

(FACEPALM)

Цитата:
1.
Зачем else?
Вы сами хотите обработать команду и передать сообщение далее по цепочке сообщений?

Программа зависает в этом куске кода т.к. получает WM_SYSCOMMAND, но так как там нет вызова inherited ни обработки SC_CLOSE,SC_MINIMIZE и.т.д, то ожидает у моря погоды.. ой того что программист сам обработает эти собщения сам.

Вызов inherited; обязателен в случае если вы сами не обработываете все эти сообщения. Иначе программа повиснет в этом куске кода, в случае если не найдет обработки посланного окну сообщения.

2.
Второе это надо смотреть не CmdType, а wParam.
Ты написал полный бред с ошибкой в каждом втором предложении.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 17.05.2011, 19:18   #9
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Давайте по порядку: что автор хотел написать то?

Ибо в коде что-то нереальное написано.

Особено радуют некоторые моменты )

Код:
procedure TForm4.N1Click(Sender: TObject);
begin
Button3.Click;
end;
Код:
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
form4.close;
Код:
sleep(100);
Ну и конечно же весь этот, не побаюсь этого слова, функционал, обеспечивает куча стороних модулей, назначение которых мне неизвестно xD

Код:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, OleCtrls, SHDocVw, XPMan, ShellAnimations,
  IdCookieManager, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls, ShellAPI, Menus, ImgList,
  GIFImg;
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 17.05.2011 в 19:21.
Valio вне форума Ответить с цитированием
Старый 17.05.2011, 19:19   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Автор вообще-то уже разобрался:

Цитата:
Тема закрыта, ошибку нашел сам!
перенес закрытие форм в событие где уничтожается форма.
Правда, неизвестно, чего он там наворотил...
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить действия при закрытии программы Lauri Общие вопросы Delphi 2 08.02.2011 02:34
Ошибка при закрытии программы Crystallon Общие вопросы Delphi 17 23.08.2010 21:07
Как закрыть файл при закрытии программы r_yevgeniy Общие вопросы Delphi 3 23.03.2010 11:28
вывод сообщения при закрытии программы tiger Помощь студентам 4 27.08.2008 23:31
ошибка при закрытии adoquery Банзай БД в Delphi 7 03.09.2007 19:31