Witam.
Mam problem przy tworzeniu nowej zakładki PageControl w kliencie irc która ma być tworzona przy próbie wejścia na nowy kanał. Ma ją wywoływać procedura OnJoin komponentu TidIRC ale za każdym razem kończy się to zawieszeniem się programu. Przed zawieszeniem się zostają wykonane jeszcze kolejne polecenia takie jak wypisanie tekstu na nowoutworzonym memo.
Próbowałem już filtrować komunikaty serwera i reagować na IdIRC1Raw ale sytuacja się powtarza.
Nie pojawiają się żadne błędy ani komunikaty. Komplikacja też przechodzi bez problemu.
Co dziwne wywołanie funkcji tworzenia nowej zakładki przez przycisk działa bez zarzutu i nie powoduje zawieszenia się.
Fragment programu:
Wywołanie funkcji:
procedure TForm1.IdIRC1Join(ASender: TIdContext; const ANickname, AHost,
AChannel: string);
begin
if ANickname = idirc1.nickname then
begin
CreateChannelTab(AChannel);
GetMsg(AChannel,' *** Witaj na kanale ' + AChannel + ' ***');
end;
end;
function Tform1.CreateChannelTab(NewTabName : String) : Boolean;
var
NewTab: TTabSheet;
NewListBox: TListBox;
Newedit: TEdit;
NewMsgWindow: TMemo;
begin
channels[chaninxtmp] := NewTabName;
NewTab := TTabSheet.Create(self);
try
with NewTab do
begin
Caption := NewTabName;
PageControl := PageControl1;
end;
except
on E: Exception do ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
end;
NewListBox := TListBox.Create(self);
try
with NewListBox do
begin
Left := 616;
Top := 0;
Width := 121;
Height := 428;
TabOrder := 0;
Parent := NewTab;
Name := 'ListBox' + inttostr(chaninxtmp);
end;
except
on E: Exception do ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
end;
NewMsgWindow := Tmemo.Create(self);
try
with NewMsgWindow do
begin
ReadOnly := true;
Left := 0;
Top := 0;
Width := 617;
Height := 428;
Align := alCustom;
Parent := NewTab;
ReadOnly := True;
OnClick := FormActivate;
OnMouseUp := MsgWindowMouseUp;
Name := 'MsgWindow' + inttostr(chaninxtmp);
clear;
end;
except
on E: Exception do ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
end;
Newedit := TEdit.Create(self);
try
with NewEdit do
begin
Left := 0;
Top := 405;
Width := 732;
Height := 20;
Align := alBottom;
TabOrder := 1;
OnKeyPress := ServerEditKeyPress;
Parent := NewTab;
Name := 'chanedit' + inttostr(chaninxtmp);
OnKeyPress := EditEnter;
clear;
end;
except
on E: Exception do ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
end;
inc(chaninxtmp);
Result := true;
end;
Z góry dziękuję za pomoc
P.S. Delphi 2007(RAD Studio) + Indy 10.1.5