Dziwny błąd przy zamykaniu programu

0

Witam, przy zamykaniu programu pojawia mi sie taki błąd. I nie wiem jak sobie z nim poradzić. Muszę przez to zamykać program przez managera zadań
user image

0

Znalazł się...
A tak może kod źródłowy ?
Średnio 6.5/10 przypadków, to idiota, który nie da kodu .

0

Za to dał olbrzymiego screena. Oprócz kodu napisz też czy błąd występuje zawsze przy zamknięciu czy tylko jak program wykona/jest w trakcie wykonywania jakaś czynność.

0

//EDIT
Błąd tkwi w tym:
hgg1.disconnect;
jak to usunałem to działa poprawnie

Jeszcze może ktoś wie dlaczego trzeba napisać kilka razy do bota, żeby dopiero załapał że ma odpowiadać... ?
\
jestem nowy na forum, tak więc przepraszam i daję kod.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, HGG,
  StdCtrls, ExtCtrls, Grids, ValEdit, Mask;

type
  TForm1 = class(TForm)
    HGG1: THGG;
    Button1: TButton;
    PlStatus: TPanel;
    Button2: TButton;
    Memo1: TMemo;
    TmpEdit: TEdit;
    Label1: TLabel;
    Command: TValueListEditor;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit3: TEdit;
    Edit5: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    MaskEdit1: TMaskEdit;
    Label8: TLabel;
    procedure HGG1Message(Sender: TObject; GGNumber: Integer;
      MessageContent: String; MessageTime: TDateTime);
    procedure Button1Click(Sender: TObject);
    procedure HGG1Connected(Sender: TObject);
    procedure HGG1Disconnected(Sender: TObject);
     procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure CommandKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    hgg1.Number  := strtoint(Edit3.Text);
    hgg1.Password  := MaskEdit1.Text;
    HGG1.Host := HGG1.GetServerAddress;
    hgg1.Status:=usAvailable;
    hgg1.connect;
  except
    ShowMessage('Wystąpił błąd');
    hgg1.Disconnect;
  end;
end;

procedure TForm1.HGG1Connected(Sender: TObject);
begin
  Label3.Color := clLime;
  Label3.Caption :='Polaczony';
  hgg1.Description := Edit5.Text;
end;

procedure TForm1.HGG1Disconnected(Sender: TObject);
begin
  Label3.Color := clRed;
  Label3.Caption :='Niepolączony';
  hgg1.Description := '';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 hgg1.disconnect;
end;

procedure TForm1.HGG1Message(Sender: TObject; GGNumber: Integer;
  MessageContent: String; MessageTime: TDateTime);
var
  Reply : string;
  Row : integer;
begin
 Memo1.Lines.Add('['+DateToStr(MessageTime)+']('+IntToStr(GGNumber)+') '+MessageContent);
 TmpEdit.Text := MessageContent;
    Command.FindRow(TmpEdit.Text,  Row);

 if  Row = -1 then
  Reply := 'Nie ma u nas takiej komendy' else
 begin
  Reply := Command.Values[Command.Keys[Row]];
 end;

  HGG1.SendMessage(GGNumber, Reply, []);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label3.Color := clRed;
Label3.Caption :='Niepolączony';
TmpEdit.Hide;
Memo1.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  RowNo : Integer;
begin
Command.FindRow(Edit1.Text, RowNo);
   if  RowNo = -1 then
Command.InsertRow(Edit1.Text, Edit2.Text, true)
else
ShowMessage('Jest już taka komenda w rzędzie '+IntToStr( RowNo))
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
      hgg1.disconnect;
end;

procedure TForm1.CommandKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Integer(Key)=46  then
    begin
        if MessageBox(Handle,PChar('Czy napewno usunąć komendę '+Command.Strings[Command.Selection.Top -1]+' ?'),
            'Usuwanie', MB_YESNO + MB_ICONQUESTION) = IdYes then
              begin
                Command.DeleteRow(Command.Selection.Top);
              end;

      end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
SaveDialog1.FileName := 'GGManiak';
if SaveDialog1.Execute then
begin
 Command.Strings.SaveToFile(SaveDialog1.FileName + '.ggm');
end;



end;

procedure TForm1.Button5Click(Sender: TObject);
begin
OpenDialog1.Filter :='GaduGadu Bot (*.ggm)|*.ggm';
if OpenDialog1.Execute then begin
Command.Strings.LoadFromFile(OpenDialog1.FileName);
end;
end;
end.

Błąd występuje w trakcie zamykania programu.

0

Nie mam THGG i nie chce chce mi się tworzyć prowizorycznego projektu ale spróbuj wywalić Disconnect z FormClose a zrób go w zdarzeniu FormCloseQuery dodatkowo przechwytuj wyjątek (i na niego nie reaguj):

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  try
  hgg1.disconnect;
  except
  //nic nie rób
  end;
end;

Możesz też na potrzeby projektu (a konkretnie "walki" z tym błędem) napisać tak:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  try
  hgg1.disconnect;
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

Wtedy może będzie bardziej wiadomo co powoduje wyjątek.
</delphi>

0

a z tego co mi wiadomo to THGG nie obsługuje nowego protokołu gg. Tzn. Nie odbiera wiadomości bo jest inna struktura pakietu.
Zrobili już to?

0

Chyba nie, lepiej użyć TEasyGG, tylko jeżeli ktoś używa Delphi 7 Personal lub wersji
bez modułów obslugujących TXMLDocument to musi je sobie skombinowac albo - co
bardziej właściwe - zakupić takową wersję, która ma te moduły (choćby Enterprise).
Można też mozolnie edytować kod aby korzystał z jakiegoś datmowego Parsera XML.
Swego czasu sugerowałem autorom w nowej wersji użycie czegoś zewnętrznego, ale
do tej pory ostatnia wersja to 0.02 i nie wiadomo czy doczekamy się jakiejś nowszej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1