Einzelnen Beitrag anzeigen

delphinub23

Registriert seit: 27. Okt 2010
Ort: Chemnitz
110 Beiträge
 
Delphi XE3 Professional
 
#1

Form in Event erzeugen mündet in merkwürdiges Verhalten

  Alt 15. Apr 2013, 18:35
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
  Mit Zitat antworten Zitat