Jump to content

milurt

Members
  • Content Count

    34
  • Joined

  • Last visited

Posts posted by milurt


  1. kodezwerg: citate: you said nothing to mine

    you citated me: pointer^:=rgb , that was i sayed to your code

    and what i want to do,

    the pointer^ should drawn in a window x,y

    how you call it in non-vcl

    i need not only a hbitmap, but a pointer, if the window-procedures need some handles.

     

    converted remy lebeau without the libraries, drawing no bitmap even bitblt is true.

     


  2. but even than there is this runtime error with the cpu-window

    in my embarcadero 10.4 for windows 10 64-bit

     

      WinOpen;
      PaintOpen;

      while GetMessage(msg, 0, 0, 0) do
      begin
        TranslateMessage(msg);
        DispatchMessage(msg);
      end;  

      Repeat Until GetAsyncKeyState(32)=-32768;

    End.

     


  3. and improved the main with this winopen gives a runtime error with opening the cpu-window:

     

    Begin
      FMem:=GetMemory(1000000);
      AsSign(F,'D:\15333842.bmp');
      FH:=FileOpen('D:\15333842.bmp',fmOpenReadWrite);
      FR:=FileRead(FH,FMem^,909594{FileSize(F)});

      Longint(BMem):=longint(FMem)+Longint(Pointer(longint(FMem)+10)^);
      PicWidth:=LongInt(Pointer(longint(FMem)+18)^);
      PicHeight:=LongInt(Pointer(longint(FMem)+22)^);

      WinWidth:=PicWidth+20;WinHeight:=PicHeight+20;
      WinX:=(1920-WinWidth) Div 2;WinY:=(1080-WinHeight) Div 2;
      WinOpen;
      PaintOpen;

      Repeat Until GetAsyncKeyState(32)=-32768;
    end.

     

    embwperr.png


  4. with the wndproc the program works not better: i can see no window anymore

     

    program BmpToWinWP;

      {$APPTYPE GUI}

      uses WinProcs,System.SysUtils;
     
      var
        FMem:Pointer;
        FH:THandle;
        F:File of Byte;
        FR:LongInt;
        BMem:Pointer;
        
        PicWidth,PicHeight:Integer;
        WinX,WinY,WinWidth,WinHeight,
        HWnd1:HWND;
        WCls1:WndClassEx;
        WinDC:HDC;
        PS:TPaintStruct;
        WinBP:HDC;
        PB:Boolean;
        
        BmpH:HBitmap;
        CDC:HDC;
        SelO:HGDIObj;
        BmpT:tagBitmap;
        
      Procedure WinOpen;
        Var
          WCN,WT:PChar;
          WReg:Integer;
          WH1:HWnd;
      Begin
        WCls1.cbSize:=sizeof(WCls1);
        WCls1.style:=CS_HREDRAW Or CS_VREDRAW;
        WCls1.lpfnWndProc:=Addr(DefWindowProc);
        WCls1.cbclsExtra:=0;
        WCls1.cbWndExtra:=0;
        WCls1.hInstance:=GetModuleHandle(nil);;
        WCls1.hIcon:=winprocs.LoadIcon(0, IDI_APPLICATION);
        WCls1.hCursor:=0;
        WCls1.hbrBackground:=(14 + 1);
        WCls1.lpszMenuName:=NiL;
        WCls1.lpszClassName:='My Window'#0;
        WCls1.hIconSm:=LoadIcon(WCls1.hInstance, IDI_APPLICATION);

        WReg:=WinProcs.RegisterClassEx(WCls1);

        WT:='My Program'#0;
        WCN:='My Window'#0;

        HWnd1:=WinProcs.CreateWindow(WCN,WT,
    {{}      ws_popup+ws_tabstop,  {NoFrame,NoTitle,NoMenu,NoMove,NoTabStop,00XY00}
    {{      WS_OVERLAPPED+WS_SIZEBOX+WS_TABSTOP,  {ThickFrame,Title,NoMenu,NoMove,NoTabStop,ThanXY00}
          WinX,WinY,WinWidth,WinHeight,
          0,0,GetModuleHandle(NiL),NiL);

        ShowWindow(HWnd1,sw_show);
        UpdateWindow(HWnd1);
      End;
          
      Procedure PaintOpen;
      Begin
        WinDC:=WinProcs.GetDC(HWnd1); {device context of window}
        PS.hdc:=WinDC;
        PS.ferase:=false;
        PS.rcpaint.left:=WinX;
        PS.rcpaint.top:=WinY;
        PS.rcpaint.right:=WinWidth;
        PS.rcpaint.bottom:=WinHeight;
        WinBP:=WinProcs.BeginPaint(HWnd1,PS);
      End;

      Procedure PaintRect(RX,RY,RWidth,RHeight:Integer;R,G,B:Byte);
        Var R1:TRect;B1:HBrush;
      Begin
        R1.left:=RX;
        R1.right:=RX+RWidth;
        R1.top:=RY;
        R1.bottom:=RY+RHeight;
        B1:=CreateSolidBrush(((B*256)+G)*256+R);
        fillrect(WinDC,r1,b1);
        DeleteObject(B1);
      End;

      procedure wndproc(hwnd:hwnd;msg,pw:word;pl:longint);
      begin
        case msg of
          wm_paint:begin   
      WinWidth:=PicWidth+20;WinHeight:=PicHeight+20;
      WinX:=(1920-WinWidth) Div 2;WinY:=(1080-WinHeight) Div 2;
      WinOpen;
      PaintOpen;
      PaintRect(0,0,WinWidth,WinHeight,0,200,0);
      PaintRect(10,10,PicWidth,PicHeight,200,0,0);

      BmpT.bmtype:=0;
      BmpT.bmwidth:=PicWidth;
      BmpT.bmheight:=PicHeight;
      BmpT.bmWidthBytes:=2*BmpT.bmwidth;
      BmpT.bmplanes:=1;
      BmpT.bmbitspixel:=24;
      BmpT.bmBits:=BMem;

      BmpH:=CreateBitmap(PicWidth,PicHeight,1,24,BMem);
      CDC:=CreateCompatibleDC(WinDC);
      SelO:=SelectObject(CDC,BmpH);
      getobject(BmpH,sizeof(bmpT),Addr(bmpT));
      PB:=BitBlT(WinDC,00,00,PicWidth,PicHeight,CDC,00,00,SRCCopy);
      SelectObject(CDC,SelO);
      DeleteObject(CDC);
    end;
        end;
      end;

    Begin
      FMem:=GetMemory(1000000);
      AsSign(F,'D:\15333842.bmp');
      FH:=FileOpen('D:\15333842.bmp',fmOpenReadWrite);
      FR:=FileRead(FH,FMem^,909594{FileSize(F)});

      Longint(BMem):=longint(FMem)+Longint(Pointer(longint(FMem)+10)^);
      PicWidth:=LongInt(Pointer(longint(FMem)+18)^);
      PicHeight:=LongInt(Pointer(longint(FMem)+22)^);

      Repeat Until GetAsyncKeyState(32)=-32768;
    end.

     


  5. now i have this and i can not see the picture:

     

    program BitmapToWindow;

      {$APPTYPE GUI}

      uses WinProcs,System.SysUtils;
     
      var
        FMem:Pointer;
        FH:THandle;
        F:File of Byte;
        FR:LongInt;
        BMem:Pointer;
        
        PicWidth,PicHeight:Integer;
        WinX,WinY,WinWidth,WinHeight,
        HWnd1:HWND;
        WCls1:WndClassEx;
        WinDC:HDC;
        PS:TPaintStruct;
        WinBP:HDC;
        PB:Boolean;
        
        BmpH:HBitmap;
        CDC:HDC;
        SelO:HGDIObj;
        BmpT:tagBitmap;
        

      Procedure WinOpen;
        Var
          WCN,WT:PChar;
          WReg:Integer;
          WH1:HWnd;
      Begin
        WCls1.cbSize:=sizeof(WCls1);
        WCls1.style:=CS_HREDRAW Or CS_VREDRAW;
        WCls1.lpfnWndProc:=Addr(DefWindowProc);
        WCls1.cbclsExtra:=0;
        WCls1.cbWndExtra:=0;
        WCls1.hInstance:=GetModuleHandle(nil);;
        WCls1.hIcon:=winprocs.LoadIcon(0, IDI_APPLICATION);
        WCls1.hCursor:=0;
        WCls1.hbrBackground:=(14 + 1);
        WCls1.lpszMenuName:=NiL;
        WCls1.lpszClassName:='My Window'#0;
        WCls1.hIconSm:=LoadIcon(WCls1.hInstance, IDI_APPLICATION);

        WReg:=WinProcs.RegisterClassEx(WCls1);

        WT:='My Program'#0;
        WCN:='My Window'#0;

        HWnd1:=WinProcs.CreateWindow(WCN,WT,
          WS_OVERLAPPED+WS_SIZEBOX+WS_TABSTOP,
          WinX,WinY,WinWidth,WinHeight,
          0,0,GetModuleHandle(NiL),NiL);

        ShowWindow(HWnd1,sw_show);
        UpdateWindow(HWnd1);
      End;
          
      Procedure PaintOpen;
      Begin
        WinDC:=WinProcs.GetDC(HWnd1);
        PS.hdc:=WinDC;
        PS.ferase:=false;
        PS.rcpaint.left:=WinX;
        PS.rcpaint.top:=WinY;
        PS.rcpaint.right:=WinWidth;
        PS.rcpaint.bottom:=WinHeight;
        WinBP:=WinProcs.BeginPaint(HWnd1,PS);
      End;

      Procedure PaintRect(RX,RY,RWidth,RHeight:Integer;R,G,B:Byte);
        Var R1:TRect;B1:HBrush;
      Begin
        R1.left:=RX;
        R1.right:=RX+RWidth;
        R1.top:=RY;
        R1.bottom:=RY+RHeight;
        B1:=CreateSolidBrush(((B*256)+G)*256+R);
        fillrect(WinDC,r1,b1);
        DeleteObject(B1);
      End;

    Begin
      FMem:=GetMemory(1000000);
      AsSign(F,'D:\15333842.bmp');
      FH:=FileOpen('D:\15333842.bmp',fmOpenReadWrite);
      FR:=FileRead(FH,FMem^,909594{FileSize(F)});

      Longint(BMem):=longint(FMem)+Longint(Pointer(longint(FMem)+10)^);
      PicWidth:=LongInt(Pointer(longint(FMem)+18)^);
      PicHeight:=LongInt(Pointer(longint(FMem)+22)^);

      WinWidth:=PicWidth+20;WinHeight:=PicHeight+20;
      WinX:=(1920-WinWidth) Div 2;WinY:=(1080-WinHeight) Div 2;
      WinOpen;
      PaintOpen;
      PaintRect(0,0,WinWidth,WinHeight,0,200,0);

      BmpT.bmtype:=0;
      BmpT.bmwidth:=PicWidth;
      BmpT.bmheight:=PicHeight;
      BmpT.bmWidthBytes:=2*BmpT.bmwidth;
      BmpT.bmplanes:=1;
      BmpT.bmbitspixel:=24;
      BmpT.bmBits:=BMem;

      BmpH:=CreateBitmap(PicWidth,PicHeight,1,24,BMem);
      CDC:=CreateCompatibleDC(WinDC);
      SelO:=SelectObject(CDC,BmpH);
      getobject(BmpH,sizeof(bmpT),Addr(bmpT));
      PB:=BitBlT(WinDC,00,00,PicWidth,PicHeight,CDC,00,00,SRCCopy);
      SelectObject(CDC,SelO);
      DeleteObject(CDC);

      Repeat Until GetAsyncKeyState(32)=-32768;
    end.

     


  6. On 5/9/2023 at 12:41 AM, Remy Lebeau said:

    BOOL is an integer.  The Windows.BOOL type is defined as a LongBool.  Don't confuse BOOL with Delphi's native Boolean type. See: BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool

    It returns -1 when it is passed invalid parameters, see: When will GetMessage return -1? Besides, assuming no memory corruption has occurred, it is otherwise physically impossible for a thread's message queue to be destroyed while the thread is still running, and a thread can't retrieve messages for other threads.

     


  7. now i have this and it is still nothing to see, but b=True

    bmpw:tagbitmap;

     

      hbmp:=CreateBitmap(100,100,1,24,RGBMem);
      bc:=CreateCompatibleDC(winddc);
      boss:=SelectObject(bc,hbmp);
      ???: getobject(hbmp,sizeof(bmpw),Addr(bmpw));
      b:=bitblt(winddc,0,0,620,489,bc,0,0,SRCCOPY);
      SelectObject(bc,boss);
      DeleteObject(bc);

     


  8. mister anders melander,

    do you want to say, what is missed to be a valid GUI?

    kodezwerg has only made procedure for the createwindow-theme,

    that types are not my questions.

    this means no more procedures are to add to show the bitmap?

    i have no runtime error.


  9. now compile it: is there a procedure missed? why the picture is not to see in the window?


     

    </>
    
    program ForumBitmap2023;
    
    {$APPTYPE GUI}
    
    uses System.SysUtils,windows;
    
    Var winc:WNDCLASSEx;
        wname,wcl:PChar;
        wnddc:hdc;
        windbp,hwind:hwnd;
        PStrc:TPAINTSTRUCT;
        FH:THandle;
        FBuf,Bmpf:Pointer;
        fch:Pchar;
        F:File of byte;
        BmpH:HBitmap;
        Bmp:tagBitmap;
        BmpDC1:Hdc;
        bmpdc2:hdc;
        bmpdc3:hdc;
    
      Function wndproc(hwndow:HWND;msga,msgword:word;msglong:longint):LResult;stdcall;
      Begin
        wndproc:=DefWindowProc(hwndow,msga,msgword,msglong);
      End;
    
    Begin
      winc.cbSize:=sizeof(winc);
      winc.style:=CS_HREDRAW Or CS_VREDRAW;
      winc.lpfnWndProc:=Addr(wndproc);
      winc.cbclsExtra:=0;
      winc.cbWndExtra:=0;
      winc.hInstance:=0;;
      winc.hIcon:=LoadIcon(0, IDI_APPLICATION);
      winc.hCursor:=0;
      winc.hbrBackground:=(14 + 1);
      winc.lpszMenuName:=NiL;
      winc.lpszClassName:='Window'#0;
      winc.hIconSm:=LoadIcon(winc.hInstance, IDI_APPLICATION);
      RegisterClassEx(winc);
      wcl:='Program'#0;
      wname:='Window'#0;
      hwind:=CreateWindow(wname,wcl,WS_OVERLAPPED+WS_SIZEBOX,300,100,700,
              500,0,0,0,NiL);
      ShowWindow(hwind,sw_show);
      UpdateWindow(hwind);
      wndDC:=GetDC(hwind);
      PStrc.hdc:=wndDC;
      PStrc.ferase:=false;
      PStrc.rcpaint.left:=0;
      PStrc.rcpaint.top:=0;
      PStrc.rcpaint.right:=690;
      PStrc.rcpaint.bottom:=495;
      windBP:=BeginPaint(hwind,PStrc);
    
      Bmpf:=GetMemory(1000000*2);
      fch:=bmpf;
      fch:=fch+10;
      FBuf:=fch;
      AsSign(F,'C:\Paints.bmp');
      FH:=FileOpen('C:\Paints.bmp',fmOpenReadWrite);
      FileRead(FH,FBuf^,735829);
    
      bmp.bmtype:=0;
      bmp.bmwidth:=630;
      bmp.bmheight:=492;
      bmp.bmWidthBytes:=2*3*bmp.bmwidth;
      bmp.bmplanes:=1;
      bmp.bmbitspixel:=24;
      bmp.bmBits:=FBuf;
      BmpH:=CreateBitmapIndirect(bmp);
      bmpdc1:=getdc(bmph);
      selectobject(bmpdc2,Bmpdc1);
      BmpDC3:=CreateCompatibleDC(Bmpdc2);
      BitBlT(wnddc,30,10,620,489,BmpDC3,0,0,SRCCOPY);
    end.
    
    </>

     


  10. i think it is better, if i do not write the complete
    registerclass and createwindow. than you have
    more overview. why is that the problem? and the
    second part of the program are the bitmap-drawing-
    procedures, where i asked which procedure can
    be absent. are the variables:=procedures better
    readable, if i make some spaces at the beginning
    of the line?

     


  11. is a procedure missing or the sequence wrong?

     

    var B001:tagBitmap;
    HB:hbitmap;
    bitmap1-3:hdc;
    begin
    hwnd001:=createwindow;
    wdc:=getdc;hbp:=beginpaint;
    PB:=getmemory;
    B001.bmBits:=PB;

    HB:=CreateBitmapIndirect(B001);
    bitmapdc1:=getdc(HB);
    selectobject(bitmapdc2,bitmapdc1);
    bitmapdc3:=CreateCompatibleDC(bitmapdc2);
    bitblt(wdc,300,300,200,100,bitmapdc3,0,0,SRCCOPY);

    end.

     


  12. i see nowhere sizeof(char) in my program.

    why is a +1 a +2?

    for does not change it and getmemory is done for 1x3000000,

    which was not so important, because i get the

    runtime error at each segm:0000 and segm:0001 where

    i write to not at 3000000+1


  13. now compile it:

     

    program Memorial;

      {$APPTYPE GUI}

      var ballpointer,step:pchar;
        a:NativeInt;

    Begin
      step:=ptr(1);
      ballpointer:=GetMemory(3000000);
      for a:=1 to 3000000 do
      begin
        ballpointer^:=#45;
        ballpointer:=ballpointer+1;
      end;
    end.

     

×