起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 155|回复: 9

【结】[请求] 帮忙改一下!

[复制链接]
发表于 2009-11-19 11:04:36 | 显示全部楼层 |阅读模式
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, ExtDlgs;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    OpenPictureDialog1: TOpenPictureDialog;
    Image1: TImage;
    SavePictureDialog1: TSavePictureDialog;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure SpeedButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Rect,drect:Trect;
  pain:boolean;
implementation

{$R *.dfm}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

  if pain=true then
  begin
    form1.Canvas.DrawFocusRect(rect);
    rect.Right:=x;
    rect.Bottom:=y;
    form1.Canvas.DrawFocusRect(rect);
  end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  rect.Left:=0;
  rect.Top:=0;
  rect.Right:=0;
  rect.Bottom:=0;
  rect.Left:=x;
  rect.Top:=y;
  if button=mbRight then
    pain:=True;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1.Refresh;
  Form1.Canvas.Draw(0,0,image1.Picture.Bitmap);
  Form1.Canvas.DrawFocusRect(rect);
  pain:=False;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var
  BMPimage : TBitmap;
  Str : String;
begin
  BMPimage:=TBitmap.Create;
  try
    drect.Left:=0;
    drect.Top:=0;
    drect.Right:= rect.Right-rect.Left;
    drect.Bottom:= rect.Bottom-rect.Top;
    BMPimage := TBitmap.Create;
    BMPimage.Width := drect.Right;
    BMPimage.Height := drect.Bottom;
    BMPimage.Canvas.CopyRect(drect,Form1.Canvas,rect);
    if key=#13 then
    begin
      if SavePictureDialog1.Execute then
      begin
        Str := SavePictureDialog1.FileName;
        BMPimage.SaveToFile(Str+'.bmp');
      end;
    end;
  except
    BMPimage.Free;
  end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   if OpenPictureDialog1.Execute then
   begin
     image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
     Form1.Canvas.Draw(0,0,image1.Picture.Bitmap);
   end;
end;

end.

以上的代码在Delphi上运行没有错的。放到平台上,编译通过,运行时SpeedButton1Click事件中Form1.Canvas.Draw(0,0,image1.Picture.Bitmap);出错,请帮忙改一下。
回复

使用道具 举报

 楼主| 发表于 2009-11-19 11:06:44 | 显示全部楼层
错误图

vvvvvvvvvvvv.gif

301.69 KB, 下载次数: 104

回复 支持 反对

使用道具 举报

发表于 2009-11-19 11:27:35 | 显示全部楼层
楼主,描述一下你是做什么样的操作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 11:32:49 | 显示全部楼层
像截图的功能,截取一块区域,然后另存

我上传Delphi的例子

0511.rar

336.57 KB, 下载次数: 65

回复 支持 反对

使用道具 举报

发表于 2009-11-19 11:53:16 | 显示全部楼层
你把你写在studio里的代码贴上来,这边看下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 14:35:20 | 显示全部楼层
unit TXBJ;

interface

uses
  Business.System, Business.Forms;

type
  TTXBJ = class(TForm)
    Button1: TButton;
    Image1: TImage;
    SavePictureDialog1: TSavePictureDialog;
    Button2: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure BizFormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure BizFormDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure BizFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure BizFormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure BizFormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure BizFormKeyPress(Sender: TObject; var Key: Char);
    procedure Button2Click(Sender: TObject);
  private
    {private declarations}
  public
    {public declarations}
  end;
  var
  TXBJ1: TTXBJ;
  Rect,drect:Trect;
  pain:boolean;

implementation



procedure TTXBJ.Button1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('c:\001.JPG');
  TXBJ1.Canvas.Draw(1,1,image1.Picture.Bitmap);

end;

procedure TTXBJ.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
{  if sender is Timage then
  Image1.BeginDrag(true,1);  }
end;

procedure TTXBJ.BizFormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
//  if source is Timage then
//   accept := true;
end;

procedure TTXBJ.BizFormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
//  if source is Timage then
// begin
//   Timage(source as Timage).Left := x;
//   Timage(source as Timage).Top := y;
//  end;
end;

procedure TTXBJ.BizFormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    rect.Left:=0;
  rect.Top:=0;
  rect.Right:=0;
  rect.Bottom:=0;
  rect.Left:=x;
  rect.Top:=y;
  if button=TMouseButton.mbRight then  //mbRight then
    pain:=True;
end;

procedure TTXBJ.BizFormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if pain=true then
  begin
    TXBJ1.Canvas.DrawFocusRect(rect);
    rect.Right:=x;
    rect.Bottom:=y;
    TXBJ1.Canvas.DrawFocusRect(rect);
  end;
end;

procedure TTXBJ.BizFormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  TXBJ1.Refresh;
  TXBJ1.Canvas.Draw(0,0,image1.Picture.Bitmap);
  TXBJ1.Canvas.DrawFocusRect(rect);
  pain:=False;
end;

procedure TTXBJ.BizFormKeyPress(Sender: TObject; var Key: Char);
var
  BMPimage : TBitmap;
  Str : String;
begin
  BMPimage:=TBitmap.Create;
  try
    drect.Left:=0;
    drect.Top:=0;
    drect.Right:= rect.Right-rect.Left;
    drect.Bottom:= rect.Bottom-rect.Top;
    BMPimage := TBitmap.Create;
    BMPimage.Width := drect.Right;
    BMPimage.Height := drect.Bottom;
    BMPimage.Canvas.CopyRect(drect,TXBJ1.Canvas,rect);
    if key=#13 then
    begin
      if SavePictureDialog1.Execute then
      begin
        Str := SavePictureDialog1.FileName;
        BMPimage.SaveToFile(Str+'.bmp');
      end;
    end;
  except
    BMPimage.Free;
  end;
end;

procedure TTXBJ.Button2Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
  begin
    image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
    dialogs.ShowMessage('ddddddddd');
    TXBJ1.Canvas.Draw(0,0,image1.Picture.Bitmap);
  end;
end;

end.


上面是全部的代码
回复 支持 反对

使用道具 举报

发表于 2009-11-19 15:15:01 | 显示全部楼层
楼主,你跟踪下代码,看看报错的地方
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 15:30:07 | 显示全部楼层
Button2Click的事件里的TXBJ1.Canvas.Draw(0,0,image1.Picture.Bitmap);
错误图在二楼
回复 支持 反对

使用道具 举报

发表于 2009-11-19 16:34:12 | 显示全部楼层
平台上尽量不要用全局变量,最好都放到方法里。而且你要先创建这个对象,把TXBJ1这个对象create。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-23 08:08:58 | 显示全部楼层
哦,可以结贴了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 04:39 , Processed in 0.043901 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表