Hallo Delphianer,
ich möchte eine Art
IRC-Chat mit separaten Chat-Fenstern für jede private Unterhaltung erstellen. Für die Kommunikation zwischen
IRC und Client nutze ich die IdIRC- Komponente.
Ziel soll sein, dass sich bei eingehenden privaten Nachrichten (Event: IdIRC.OnPrivateMessage) ein neues Formular (wichtig: NICHT modal) öffnet.
Derzeit versuche ich es so:
Hauptformular
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdContext, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdCmdTCPClient, IdIRC, Unit2;
type
TForm1 =
class(TForm)
IdIRC1: TIdIRC;
procedure IdIRC1Connected(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdIRC1ServerWelcome(ASender: TIdContext;
const AMsg:
string);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
IdIRC1.Connect;
end;
procedure TForm1.IdIRC1Connected(Sender: TObject);
begin
OutputDebugString(PChar('
##### IRCConnected'));
end;
procedure TForm1.IdIRC1ServerWelcome(ASender: TIdContext;
const AMsg:
string);
begin
OutputDebugString(PChar('
##### IdIRCServerWelcome'));
if TForm2.Execute
then
OutputDebugString(PChar('
##### TForm2.Executed'));
end;
end.
Chat-Formular
Delphi-Quellcode:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
class var FForm: TForm2;
class function Execute: Boolean;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TForm2 }
class function TForm2.Execute: Boolean;
begin
FForm := TForm2.Create(Application);
FForm.Show;
Result := True;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Beep;
end;
end.
Wenn der Code ausgeführt wird, öffnet sich die zweite Form. Nur leider friert die Anwendung direkt ein. Wenn ich aber das zweite Formular außerhalb eines Events erzeuge, funktioniert das. Modale Formulare funktionieren, wenn diese innerhalb des Events erzeugt und angezeigt werden.
Nun zu meiner Frage:
Ist es möglich Formulare innerhalb von Ereignissen zu erzeugen, die nicht modal sind?
grüße,
dnub