AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi was machen mit den Hangups ? Konsolenprobleme die zweite ^ ^
Thema durchsuchen
Ansicht
Themen-Optionen

was machen mit den Hangups ? Konsolenprobleme die zweite ^ ^

Offene Frage von "hboy"
Ein Thema von hboy · begonnen am 9. Jan 2005 · letzter Beitrag vom 26. Jan 2005
Antwort Antwort
Seite 3 von 5     123 45      
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#21

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 14:02
nice one... nein es gibt wirklich keinen. die ( diesmal mit richtigem genus für Schleife ^^ ) Message-loop wirst du vergeblich suchen. es gibt eine bei ConsoleIn, die allerdings nach Ende der eingabe abgebrochen wird.
Wenn das so weitergeht pack ich das ganze zeug doch in einen Thread, mach ne eigene Message-loop und versuche, das Fensterli bei der CloseFunc zu schließen...
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#22

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 14:06
ich wollte deswegen keine eigene message-verarbeitung, weil ich ja sonst die key events des Fensters verwenden müsste, so kann ich mir die Zeichen direkt aus der Message holen. Nur so als Anmerkung.
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#23

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 14:38
Zitat von hboy:
nice one... nein es gibt wirklich keinen. die ( diesmal mit richtigem genus für Schleife ^^ ) Message-loop wirst du vergeblich suchen. es gibt eine bei ConsoleIn, die allerdings nach Ende der eingabe abgebrochen wird.
Es gibt, wenn du ein Fenster (auf welche Art auch immer) in Windows erstellst, _immer_ eine Message-Loop. Wie gesagt, sie kann implizit sein, aber darum geht es hier nicht. Zeig doch einfach mal wo/wie du das Fenster erzeugst? Ist es _noch_ VCL? Siehe oben "ConsoleWin" (das sieht nach VCL-Form aus).
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#24

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 14:50
Erstens:

Hierarchie
Delphi-Quellcode:
TObject
  |
  TCustomWnd
    |
    TWnd
      |
      TConsoleWnd
ist das meine eigene Fensterklasse, zweitens gibt es kein application und deswegen auch kein application.run in dem die sein könnte und drittens wird das Fenster direkt über die WindowProc initialisiert, oder sollte ich mich da irren ?. Dazu braucht es noch keine Schleife um eine Queue abzuarbeiten.

Sag mir wo die Message-loop stecken soll ?

PS: zum Thema detaillierter Einblick in diesen Thread: Ich habe diese Konsole da
http://www.delphipraxis.net/download.php?id=9210
bis jetzt so weit gebracht. Programm ist ~130kb groß. Das will ich mit der VCL mal sehn
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#25

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 14:56
wenn ich mir deinen Code unter dem link da anschau finde ich auch eine Message-loop. Und jetzt denk dir die mal weg.
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#26

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 15:25
Zitat von hboy:
Erstens:

Hierarchie
Delphi-Quellcode:
TObject
  |
  TCustomWnd
    |
    TWnd
      |
      TConsoleWnd
ist das meine eigene Fensterklasse, zweitens gibt es kein application und deswegen auch kein application.run in dem die sein könnte und drittens wird das Fenster direkt über die WindowProc initialisiert, oder sollte ich mich da irren ?. Dazu braucht es noch keine Schleife um eine Queue abzuarbeiten.
Sondern?

Zitat von hboy:
Sag mir wo die Message-loop stecken soll ?
Wird das jetzt Brezeln braten ... ähem Rätsel raten? Das will ich von dir Wissen. Jedes Form oder Fenster braucht eine Message-Loop, soviel steht fest. Und wie exakt du die hookst um dort deinen weiteren Code unterzubringen ist ja jetzt die Frage.

Zitat von hboy:
wenn ich mir deinen Code unter dem link da anschau finde ich auch eine Message-loop. Und jetzt denk dir die mal weg.
Du meinst sicher "program test1;" - wenn du dort die Schleife wegläßt, wird sich das Programm sofort beenden, denn es kann keine Nachrichtenverarbeitung stattfinden.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#27

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 15:45
hm also 1. Feststellung: es *braucht* einen loop. ja genau darum geht es ja wie ich die schleife unterbing ohne mein ganzes konzept übern haufen zu schmeißen ( nicht vorher eingeplant da nice-to-have )
Power is nothing without TControl
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#28

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 17:36
Zitat von hboy:
hm also 1. Feststellung: es *braucht* einen loop. ja genau darum geht es ja wie ich die schleife unterbing ohne mein ganzes konzept übern haufen zu schmeißen ( nicht vorher eingeplant da nice-to-have )
Kannst du mal die Implementation des Konsolenfensters (des Fensters!!!) zeigen.
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#29

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 19:08
hättest den Klassenname nennen müssn. ich nehm mal an TConsoleWnd. TCustomWnd is meine heilige kuh

Delphi-Quellcode:
unit ConsoleWnd;

interface
  uses WndClass, StaticClass, types, windows, sysutils;

  type TConsoleWnd = class(TCustomWnd)
    proto: TCustomWndProtocolstatic;
    killed : boolean;
    Constructor Create(Param: Cardinal);
    Destructor Destroy; override;
  private
    fUseMessageThread: Boolean;
    TID: Cardinal;
    procedure Resize(Sender: TObject);
    procedure Hide(Sender: TObject);
    procedure SetUseMessageThread(doit: Boolean);

  public
    property UseMessageThread: Boolean read fUseMessageThread write SetUseMessageThread;
    procedure ProcessMessage;
  end;

  var WinKilled: Boolean;

implementation

 Constructor TConsoleWnd.Create(Param: Cardinal);
 begin
   inherited;
   self.Width := 700;
   self.Height := 400;
   self.UseMinConstraints := true;
   self.MinConstraintsVal := Point(700, 400);
   proto := TCustomWndProtocolstatic.Create(self.handle);
   proto.Width := self.ClientRect.Right;
   proto.Height := self.ClientRect.Bottom;
   proto.font.Color := $FFFFFF;
   proto.font.Name := 'Courier';
   proto.Color := $0;
   proto.Clear;
   self.OnResize := Resize;
   self.OnHide := Hide;
 end;

 procedure TConsoleWnd.Resize(Sender: TObject);
 begin
   if self.ClientRect.Bottom =0 then exit;
   proto.Width := self.ClientRect.Right;
   proto.Height := self.ClientRect.Bottom;
 end;

 procedure TConsoleWnd.Hide(Sender: TObject);
 begin
   proto.Hide;
   windows.TerminateProcess(GetCurrentProcess,0);
 end;

 Destructor TConsoleWnd.Destroy;
 begin
   proto.Free;
   inherited;
 end;

 procedure TConsoleWnd.ProcessMessage;
 var msg: TMsg;
 begin
   if GetMessage(msg,0,0,0) then
   begin
     TranslateMessage(msg);
     DispatchMessage(msg);
   end;
 end;


 procedure MessageProc(param: Cardinal);
 begin
  while true do TConsoleWnd(param).ProcessMessage;
 end;

 procedure TConsoleWnd.SetUseMessageThread(doit: Boolean);
 begin
   if (self.fUseMessageThread = false) and doit then
   begin
     BeginThread(nil,0,@MessageProc,@self,0,TID);
   end;

   if (self.fUseMessageThread = true) and (not doit) then
   begin
     TerminateThread(TID,0);
   end;
 end;
end.
Power is nothing without TControl
  Mit Zitat antworten Zitat
hboy

Registriert seit: 16. Jan 2004
364 Beiträge
 
#30

Re: was machen mit den Hangups ? Konsolenprobleme die zweite

  Alt 12. Jan 2005, 19:10
kleine zwischenbilanz:
Das hier artet irgendwie in eine code- und Textschlacht aus. der Lösung bin ich allerdings noch nicht viel näher gekommen.
Power is nothing without TControl
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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:31 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