AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Form in Event erzeugen mündet in merkwürdiges Verhalten
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von delphinub23 · begonnen am 15. Apr 2013 · letzter Beitrag vom 16. Apr 2013
Antwort Antwort
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
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#2

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

  Alt 15. Apr 2013, 20:10
Probier es mal mit Delphi-Referenz durchsuchenCreateNew
  Mit Zitat antworten Zitat
delphinub23

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

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

  Alt 15. Apr 2013, 22:11
CreateNew zeigt das gleiche Verhalten - sollte auch so sein, da durch CreateNew auch der Standard Konstruktor gerufen wird.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

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

  Alt 15. Apr 2013, 22:13
Zeige doch endlich mal Quellcode. So kommen wir nicht weiter.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
delphinub23

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

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

  Alt 15. Apr 2013, 22:20
Der Quelltext aus dem ersten Post reicht dir nicht?
Mehr habe ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 15. Apr 2013, 22:30
Sorry, habe die Threads verwechselt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

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

  Alt 15. Apr 2013, 22:38
Ich wette mal, dass der Aufruf nicht im MainThread-Kontext erfolgt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
delphinub23

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

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

  Alt 16. Apr 2013, 12:03
Ich wette mal, dass der Aufruf nicht im MainThread-Kontext erfolgt.
Korrekt. Die IdIRC-Komponente arbeitet die Events in ihrer eigenen Thread-Nachrichtenschleife ab. Gelöst habe ich es, indem ich die MainForm via PostMessage informiere und dann im MainForm-Kontext das neue Formular erzeuge.

Danke an alle Beteiligten

Geändert von delphinub23 (16. Apr 2013 um 12:11 Uhr) Grund: Rechtschreibung
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz