Hallo Olli!
Zitat:
Zitat von
schöni:
Delphi-Quellcode:
DoBreakRun := False;
while Windows.GetMessage(Msg, 0, 0, 0) and not DoBreakRun do
begin
Windows.TranslateMessage(msg);
Windows.DispatchMessage(msg);
end;
Wes Grundes benutzt du eine Boolen-Variable? Dazu ist doch WM_QUIT da, um die Nachrichtenschleife abzubrechen?!
Den Quelltext habe ich vom fpGui Projekt übernommen. Quelle -> Siehe vorhergehender Beitrag! Werde aber Deinen Hinweis beim Redesign, das möglicherweise ansteht, berücksichtigen.
Zitat:
Zitat von
schöni:
Die Variable Window(1) ist doch laut Delphi Hilfe definiert. Nach meinem Verständnis müßte ich doch, falls die Variable Windows nicht ordnungsgemäß initialisiert ist, eine
Exception kriegen. Krieg ich aber nicht! Stattdessen bleibt mein Programm an der WHILE-Anweisung einfach stehen, wie ich mit dem integrierten Debugger festgestellt habe. Ich müßte doch hier, falls keine Message ankommt, weiterspringen. Wenn Messages anliegen, was ich mal voraussetze, da ja der Befehlszähler an der While Schleife stehen bleibt, müßte ich bis zum Eintreffen von Alt+F4 ständig TranlateMessage->DispatchMessage->GetMessage abarbeiten
Zeigst du denn das Fenster vorher auch an? Ansonsten kann ich dir sagen warum keine Nachrichten ankommen *g*
Nein, es wird kein Fenster angezeigt!
Zitat:
Bei den Stilen fehlt WS_VISIBLE und das folgende ist total unsinnig. Wozu würde man Nullen dort stehen lassen?
Danke! Diesen Teil werde ich wohl deshalb überarbeiten müssen.
Zitat:
Genaugenommen sollte Window sogar ein Kindfenster der Instanz von TMainWindow sein.
Up's, dann wird wohl doch ein Redesign anstehen. Dazu muß ich mir den Quelltext noch mal vornehemn.
Zitat:
Ansonsten ist dir schon bewußt, daß man nur eine Nachrichtenschleife pro Thread haben kann?! Du gibst uns zuwenig um wirklich helfen zu können, wobei Low-Level-
VCL-Programmierung sowieso nicht mein Ding ist. Mindestens die Typendefinition deiner Klasse müßte noch her.
Eine Nachrichtenschleife pro Thread! Danke. Weiß ich erst jetzt.
Hier ist sie:
Delphi-Quellcode:
type
TGDIWindow =
class(TGfxWindow)
private
FHandle: HWND;
FMinSize, FMaxSize: TSize;
FCaption:
String;
// Messages:
procedure WMCreate(
var Msg: TMessage);
message WM_CREATE;
procedure WMDestroy(
var Msg: TMessage);
message WM_DESTROY;
procedure WMGetMinMaxInfo(
var Msg: TMessage);
message WM_GETMINMAXINFO;
procedure WMActivate(
var Msg: TMessage);
message WM_ACTIVATE;
procedure WMPaint(
var Msg: TMessage);
message WM_PAINT;
procedure WMShowWindow(
var Msg: TMessage);
message WM_SHOWWINDOW;
procedure WMMove(
var Msg: TMessage);
message WM_MOVE;
procedure WMSize(
var Msg: TMessage);
message WM_SIZE;
// Input messages:
procedure WMLButtonDown(
var Msg: TMessage);
message WM_LBUTTONDOWN;
procedure WMLButtonUp(
var Msg: TMessage);
message WM_LBUTTONUP;
procedure WMRButtonDown(
var Msg: TMessage);
message WM_RBUTTONDOWN;
procedure WMRButtonUp(
var Msg: TMessage);
message WM_RBUTTONUP;
procedure WMMButtonDown(
var Msg: TMessage);
message WM_MBUTTONDOWN;
procedure WMMButtonUp(
var Msg: TMessage);
message WM_MBUTTONUP;
procedure WMMouseMove(
var Msg: TMessage);
message WM_MOUSEMOVE;
procedure WMMouseWheel(
var Msg: TMessage);
message WM_MOUSEWHEEL;
procedure WMKeyDown(
var Msg: TMessage);
message WM_KEYDOWN;
procedure WMKeyUp(
var Msg: TMessage);
message WM_KEYUP;
procedure WMChar(
var Msg: TMessage);
message WM_CHAR;
procedure WMSysKeyDown(
var Msg: TMessage);
message WM_SYSKEYDOWN;
procedure WMSysKeyUp(
var Msg: TMessage);
message WM_SYSKEYUP;
procedure WMSysChar(
var Msg: TMessage);
message WM_SYSCHAR;
protected
WindowClass: TWndClass;
{!!!: static;}
FWindowStyle, FWindowStyleEx: LongWord;
// values used for creation
FMouseInWindow, FHasMouseCapture, FHasFocus: Boolean;
function GetCaption:
String;
procedure SetCaption(
const ATitle:
String);
procedure DoSetCursor;
override;
procedure UpdateWindowButtons;
function DoMouseEnterLeaveCheck(
const Msg: TMessage): Boolean;
public
constructor Create(AScreen: TGDIScreen; AParent: TGDIWindow;
AWindowType: TGfxWindowType);
destructor Destroy;
override;
procedure DefaultHandler(
var Message);
override;
procedure SetPosition(
const APosition: TPoint);
override;
procedure SetSize(
const ASize: TSize);
override;
procedure SetMinMaxSize(
const AMinSize, AMaxSize: TSize);
override;
procedure SetClientSize(
const ASize: TSize);
override;
procedure SetMinMaxClientSize(
const AMinSize, AMaxSize: TSize);
override;
procedure Show;
override;
procedure Invalidate(
const ARect: TRect);
override;
procedure PaintInvalidRegion;
override;
procedure CaptureMouse;
override;
procedure ReleaseMouse;
override;
property Caption:
String read GetCaption
write SetCaption;
property Handle: HWND
read FHandle;
end;
Im Anhang ist der Komplette Quelltext dazu. Da wird sonst zu groß hier!
Zitat von
Daniel:
...Also komme bitte wieder zur Ruhe - es ist ja nichts passiert.
Ok. Aber ich war schon sauer. Zumal ich Eine Woche gebraucht habe, um die Units unter Freepascal übersetzt zu kriegen, dann noch mal ne Woche, um die Quellen für Delphi fit zu machen und dann muß ich mich noch rechtfertigen, wo ich das Zeug her habe. Ich habe inzwischen wirklich genug eigene Arbeit da reingesteckt!
Deine Mail hab ich auch erhalten! Hoffentlich kriegen die Webhoster das Problem der Verfügbarkeit dieser Seite bal wieder in den Griff
schöni
[edit=sakura] Zitat-Tags korrigiert. Mfg, sakura[/edit]
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.