问题1 在IMAGE控件上加载一张图片,图片尺寸很大,整个屏幕显示不完,所以需要向ACD图片软件上那样,用手可以拖动图片,图片可以移动,不是IMAGE移动最好是按住CTRL或者SHELFT键移动,因为鼠标按键在下面我需要用的来获取点下来的坐标的。
问题2 IMAGE的鼠标移动事件里获得鼠标移到的左边,要求以MM(毫米)为单位我自己写了个代码是以整数问单位的给大家看看
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
pos : string;
begin
pos := format('%3d,%3d',[X,Y]);
statusbar1.Panels[1].Text := pos;
end;
请大家写出的代码有注释,我是新手怕看不懂,谢谢了,分不多请大家体谅。
解决方案 »
- 低调发布一个小玩意
- System.Text.Encoding.GetEncoding("GB2312").GetString换delphi怎么写呢
- 在dbgird里面随便点一行的某一列,然后在edit里面显示了。在edit里面修改后怎么保存这个修改?
- 请教高手一个问题:怎样在DLL中定义接口,让程序读取DLL中数据,和修改
- 刚接触数据库,请教一个问题
- 游戏新手如何入门?
- 如何获得FTP中的文件列表,包括子文件夹。
- 怎么在不更改IE的安全级别的情况下在浏览器中运行ActiveX控件
- 如何对比两个日期
- 如何创建一个MDIChild窗体
- 请教Indy10中TIdHttp的post方法无法返回的问题
- 怎样把VB自定义函数封装成DLL,供DELPHI调用
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, JPEG;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormPaint(Sender: TObject);
procedure FormResize(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);
private
Jpg: TJpegImage;
StartX, StartY, px, py, mx, my: Integer;
MouseDown: Boolean;
procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
Jpg := TJpegImage.Create;
Jpg.LoadFromFile('1.jpg');
px := 0;
py := 0;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Jpg.Free;
end;procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Draw(px, py, Jpg);
end;procedure TForm1.FormResize(Sender: TObject);
begin
if Assigned(Jpg) then begin
mx := ClientWidth - Jpg.Width;
my := ClientHeight - Jpg.Height;
end;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if not MouseDown then
begin
MouseDown := True;
StartX := X;
StartY := Y;
end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if MouseDown then
begin
Dec(px, StartX - X);
Dec(py, StartY - Y);
if px > 0 then px := 0;
if px < mx then px := mx;
if py > 0 then py := 0;
if py < my then py := my;
StartX := X;
StartY := Y;
Refresh;
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if MouseDown then
MouseDown := False;
end;procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
Msg.Result := -1;
end;end.编译目录放置一个大于Form的1.jpg的图片文件。看效果。
statusbar1.Panels[1].Text := pos1;
Jpg.LoadFromFile('1.jpg');
换成
Jpg.LoadFromFile('c:\1.jpg');
这样把你的1.jpg放到c:\根目录。需要注意的是,有些jpg文件Delphi会打不开,需要先用绘图工具转换成bmp,然后再转换成jpg即可。具体原因没有研究过……Delphi的问题吧。"能不能把鼠标按下的时间加一个坐标,显示为MM是单精度型"这句话……我没理解……