AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

wndproc geht nicht

Ein Thema von milurt · begonnen am 19. Jun 2022 · letzter Beitrag vom 1. Jul 2022
Antwort Antwort
milurt

Registriert seit: 16. Dez 2020
30 Beiträge
 
#1

AW: wndproc geht nicht

  Alt 24. Jun 2022, 13:40
ich habe es geschafft, danke.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#2

AW: wndproc geht nicht

  Alt 25. Jun 2022, 10:21
ich habe es geschafft, danke.
Som du hast es also geschafft. Aber mit welchem Ansatz?
Magst du verhindern, dass wir diesbezüglich dumm sterben?
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#3

AW: wndproc geht nicht

  Alt 25. Jun 2022, 11:08
Zitat:
Magst du verhindern, dass wir diesbezüglich dumm sterben?
Wird er wohl nicht können.
Denn bekanntlich sterben wir alle dumm andernfalls würden wir ewig leben.
  Mit Zitat antworten Zitat
milurt

Registriert seit: 16. Dez 2020
30 Beiträge
 
#4

AW: wndproc geht nicht

  Alt 25. Jun 2022, 13:52
so ging es, vielleicht haben himitsu und ich bei weiteren gesprächen peekmessage vergessen.
wndproc braucht man schon weil regwin sie pointet.

Code:
program bspforum01chg2me2;

  uses
  wintypes,
  Winprocs;

  Var
    Cls:WNDCLASSEX;
    dk,db,dm:ShortInt;

  Function wndproc(hwnd1:HWND;m,w:word;l:longint):LongInt;stdcall;
  Begin
    wndproc:=DefWindowProc(hwnd1,m,w,l);
  End;

  Function regwin:Integer;
  Begin
    cls.cbSize:=sizeof(cls);
    cls.style:=CS_HREDRAW Or CS_VREDRAW;
    cls.lpfnWndProc:=Addr(wndproc);
    cls.cbClsExtra:=0;
    cls.cbWndExtra:=0;
    cls.hInstance:=GetModuleHandle(nil);; {IH}
    cls.hIcon:=winprocs.LoadIcon(0, IDI_APPLICATION);
    cls.hCursor:=0;
    cls.hCursor:=0;
    cls.hbrBackground:=(14 + 1);
    cls.lpszMenuName:=NiL;
    cls.lpszClassName:='Win here'#0;
    cls.hIconSm:=LoadIcon(cls.hInstance, IDI_APPLICATION);

    regwin:=winprocs.RegisterClassEx(cls);
  End;

  Function creWin:word;
    Var
      s2,s1:pchar;
      wndparent:hwnd;
      menu:hmenu;
      instance:thandle;
      param:pointer;
  Begin
    S1:='STATIC'#0;
    S2:='Win here'#0;
    wndparent:=0;
    menu:=0;
    instance:=0;
    param:=NiL;
    creWin:=winprocs.createwindow(s2,s1,ws_popup,60,40,300,200,
      wndparent,menu,instance,param);
  End;

  Var hwnd1:hwnd;

  procedure draw4(hwnd1:hwnd;x,y,wid,hei:word;r,g,b:byte);
    Var
      DC,bp:HDC;
      xx,yy:LongInt;
      PaintStrc:wintypes.TPAINTSTRUCT;
  Begin
    DC:=winprocs.getdc(hwnd1); {device context of window}
    PaintStrc.hdc:=DC;
    PaintStrc.ferase:=false;
    PaintStrc.rcpaint.left:=0;
    PaintStrc.rcpaint.top:=0;
    PaintStrc.rcpaint.right:=X+wid;
    PaintStrc.rcpaint.bottom:=Y+hei;
    bp:=winprocs.BeginPaint(hwnd1,PaintStrc);
    for yy:=1 To hei Do
      For xx:=1 To wid Do
      Begin
        winprocs.SetPixel(dc,x+xx,y+yy,(((r*256)+g)*256)+b);
      End;
    winprocs.EndPaint(hwnd1,PaintStrc);
    releasedc(hwnd1,dc);
  end;

  var msg:tagmsg;

  procedure readkm;
  begin
    while PeekMessage(msg, hwnd1, 0, 0, PM_REMOVE) do begin
      if msg.message=$100 then dk:=+1;
      if msg.message=$101 then dk:=-1;
      if msg.message=$201 then db:=+1;
      if msg.message=$200 then db:=-1;
      if msg.message=$200 then dm:=-1*dm;
      if msg.message=$204 then db:=2;
    end;
  end;

Begin
  dk:=-1;db:=-1;dm:=-1;
  regwin;
  hwnd1:=crewin;
  msg.hwnd:=hwnd1;
  showwindow(hwnd1,sw_show);
  updatewindow(hwnd1);
  draw4(hwnd1,00,00,70,30,$40,$40,$40);
  Repeat
    readkm;
    if dk=-1 Then draw4(hwnd1,02,02,20,20,$C0,$00,$00)
      else draw4(hwnd1,02,02,20,20,$80,$80,$00);
    if db=-1 Then draw4(hwnd1,24,02,20,20,$00,$C0,$00)
      else draw4(hwnd1,24,02,20,20,$00,$80,$80);
    if dm=-1 Then draw4(hwnd1,46,02,20,20,$00,$00,$C0)
      else draw4(hwnd1,46,02,20,20,$80,$00,$80);
  Until db=2;
end.
  Mit Zitat antworten Zitat
milurt

Registriert seit: 16. Dez 2020
30 Beiträge
 
#5

AW: wndproc geht nicht

  Alt 29. Jun 2022, 20:52
ich habe das problem, dass bei peekmessage niemals ein wm_char kommt, wenn ich eine taste drücke.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: wndproc geht nicht

  Alt 29. Jun 2022, 22:49
Ich seh kein PeekMessage im Code. (#20)

Außerdem ist da schonwieder lpClassName und lpWindowsName im CreateWindow vertauscht, bzw. es wird eine Klasse registriert, die nie verwendet wird.




Und nicht alle Messages kommen aus PeekMessage/GetMessage raus.
z.B. Alles, was SendMessage betrifft, wird direkt innerhalb von PeekMessage/GetMessage verarbeitet und garnicht zurückgegben.

Ebenso liegen z.B. WM_TIMER garnicht in der MessageQueue, sondern werden direkt im PeekMessage/GetMessage generiert und rausgegeben.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
milurt

Registriert seit: 16. Dez 2020
30 Beiträge
 
#7

AW: wndproc geht nicht

  Alt 30. Jun 2022, 10:19
bei meinem #20 letzten beitrag ist in readkm ein peekmessage.
wie liest man also von der tastatur zeichen?
wozu brauche ich wm_timer dabei?
  Mit Zitat antworten Zitat
Antwort Antwort

 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:16 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-2025 by Thomas Breitkreuz