• WinAPI: OffsetWindowOrgEx 移动窗口坐标原点


    相关函数: OffsetViewportOrgEx

    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    var
      cvs: TCanvas;
      bit: TBitmap;
      f: Boolean;
      x1,y1: Integer;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      bit := TBitmap.Create;
      bit.LoadFromFile('c:\temp\test.bmp');
      cvs := TCanvas.Create;
      cvs.Handle := GetDC(Handle);
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    const
      str = 'Delphi';
    var
      x,y: Integer;
    begin
      {在图片中绘制文本}
      bit.Canvas.Font.Size := 24;
      bit.Canvas.Font.Style := [fsBold];
      bit.Canvas.Font.Color := 0;
      bit.Canvas.Brush.Style := bsClear;
      x := (bit.Width - bit.Canvas.TextWidth(str)) div 2;
      y := (bit.Height - bit.Canvas.TextHeight(str)) div 2 + 32;
      bit.Canvas.TextOut(x, y, str);
    
      {在窗体上绘制图片}
      x := (ClientWidth - bit.Width) div 2;
      y := (ClientHeight - bit.Height) div 2;
      cvs.Draw(x, y, bit);
    end;
    
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      f := True;
      x1 := X;
      y1 := Y;
    end;
    
    procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      if f then
      begin
        OffsetWindowOrgEx(cvs.Handle, -(X-x1), -(Y-y1), nil);
        x1 := X;
        y1 := Y;
        Repaint;
      end;
    end;
    
    procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      f := False;
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      bit.Free;
      cvs.Free;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 212
      Top = 116
      Caption = 'Form1'
      ClientHeight = 204
      ClientWidth = 262
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesigned
      OnCreate = FormCreate
      OnDestroy = FormDestroy
      OnMouseDown = FormMouseDown
      OnMouseMove = FormMouseMove
      OnMouseUp = FormMouseUp
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object Button1: TButton
        Left = 96
        Top = 171
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 0
      end
    end
    
  • 相关阅读:
    mysql 如何优化left join
    mysql按日期分组(group by)查询统计的时候,没有数据补0的解决办法。
    JVM中各种变量保存位置
    CDN原理
    为什么家里的宽带的IP显示的是外地?
    2017 年 PHP 程序员未来路在何方?
    Nginx开启Gzip压缩提高页面加载速度
    git如何强制用远程分支更新本地
    真正的S2b其实是S2b2c
    判断JS数据类型的几种方法
  • 原文地址:https://www.cnblogs.com/del/p/1211441.html
Copyright © 2020-2023  润新知