![]() |
Form in Event erzeugen mündet in merkwürdiges Verhalten
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:
Chat-Formular
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.
Delphi-Quellcode:
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.
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. Nun zu meiner Frage: Ist es möglich Formulare innerhalb von Ereignissen zu erzeugen, die nicht modal sind? grüße, dnub |
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Probier es mal mit
![]() |
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
CreateNew zeigt das gleiche Verhalten - sollte auch so sein, da durch CreateNew auch der Standard Konstruktor gerufen wird.
|
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Zeige doch endlich mal Quellcode. So kommen wir nicht weiter.
|
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Der Quelltext aus dem ersten Post reicht dir nicht?
Mehr habe ich nicht. |
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Sorry, habe die Threads verwechselt.
|
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Ich wette mal, dass der Aufruf nicht im MainThread-Kontext erfolgt.
|
AW: Form in Event erzeugen mündet in merkwürdiges Verhalten
Zitat:
Danke an alle Beteiligten :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz