Thema: Delphi wndproc geht nicht

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.112 Beiträge
 
Delphi 12 Athens
 
#12

AW: wndproc geht nicht

  Alt 22. Jun 2022, 09:57
himitsu, was ist #3 und #8 bei dir da?
Schau mal im Forum bei den einzelnen Posts oben rechts in die Ecke.

Wenn neues Delphi, dann schmeiß die uralten Units raus und verwende die Aktuellen,
denn wintypes und winproc gibt es schon seit Jahrzehnten nicht mehr. (du kannst froh sein, dass standardmäßig in Projektoptionen > Delphi-Compiler > Unit-Aliase etwas drin steht)

ja, ich habe die case in readkm kurz nach dem forum
in die schleife getan und es hat auch nicht funktioniert.
Ja, theoretisch würde es dann gehn, wenn ... dein Programm nicht vorher hängen bleiben würde (siehe meine letzte Antwort).
Oder wenn es durch GetMessage nicht in der Schleife hinge und deine Rechtecke aus draw4 nicht öfters gelöscht/üermalt würden, als du sie neu zeichnen lässt.

WM_POPUP hat nichts hat nichts direkt mit der Fenstergestaltung zu tun. Dafür gibr es andere Attribute.
Es steuert wird das Fenster reagiert ... eben wie ein POPUP, also was selbstgebautes ähnlich einem PopupMenü, MainMenü oder dem DropDown einer ComboBox.

nicht nur keydown haben will, sondern auch den letter von der tastatur
Wenn man statt nichtssagender Nummern die passenden Konstanten verwenden würde, dann könnte man auch in der Hilfe danach suchen
und fände raus, dass dort die Taste ebenfalls in der Message drin steckt und wie man da dran kommt.

MSDN-Library durchsuchenWM_KEYDOWN/WM_KEYUP ala TForm.OnKeyDown/OnKeyUp liefert den ScanCode (Code der Taste, noch ohne Übersetuung des KeyboardLayouts) und die ModifierKeys (Strg/Alt/Shift)
MSDN-Library durchsuchenWM_CHAR als TForm.OnKeyPress



mein debugger überspringt in readkm $100 zu $101
und von dort zu getmessage.
wenn ich call readkm weglasse werden die drei vierecke
gezeichnet, ansonsten nur das grosse graue.
Nja, mit GetMessage hat du ein großes Problem ... das Programm wartet dort, bis zur nächsten Message.

Mit PostMessage rannte es immer in der schleife und dadurch wurden auch die Rechtecke "immer wieder" neu gemalt.
Fällt nicht kaum auf, wenn Windows das Fenster neu malt und damit deine Rechtecke übermalt. (sie dann ganz kurz weg sind, bis zum nächsten Malen der Rechtecke)

Eigentlich gehört das Malen der Rechtecke besser ins WM_PAINT (ala OnPaint bei TForm oder TPaintBox)
und beim Ändern des Status, durch Taste/Maus, löst man ein Repaint aus.

In aktuellen Windowsen hast du noch Grlück, dass der WindowsDesktoManager mehr zwischenspeichert ... bei älteren Windows hättest du noch mehr Probleme, weil dort noch öfters das Fenster neu gemalt würde (es deine Rechtecke übermalt).


Zitat:
deine webseiten haben nichts gebracht.
Wenn man direkt mit der WinAPI (GDI) arbeiten will, dann sollte man da bissl Grundlagen kennen und wissen wo die Dokumentation zu finden ist (MSDN bzw. Win32-SDK).
Für eine Suche bezüglich Delphi, da nennen wir sowas gern mal NonVCL (also "ohne die VCL" und somit ohne so Zeugs wie TForm und TPaintBox/TImage oder TShape und OnKeyDown/OnKeyPress/OnMouseMove, was man hierfür verwenden könnte)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jun 2022 um 10:00 Uhr)
  Mit Zitat antworten Zitat