procedure TFormMain.Button1Click(Sender: TObject); begin ImageMouseUp(TObject(Image), [mbLeft], [], 1, 1); end;
procedure TFormMain.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin maProconmouse(para1,para2 ...); end; procedure TFormMain.maProconmouse(para1:integer,para2:xxxx ...); begin .... end;
procedure TFormMain.Button1Click(Sender: TObject); begin maProconmouse(para1,para2 ...); end;
var X, Y : Integer; begin X := 0; Y := 0; ImageMouseUp(TObject(Image), mbLeft, [], X, Y);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionImageMouseUp(nil, mbLeft, [], 0, 0);
J'aurais préféré utiliser la proposition directe de fOxi
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; CheckBox1: TCheckBox; Edit1: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); private a : integer; procedure calculalacon; { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button2Click(Sender: TObject); begin Button1Click(self); end; procedure TForm1.calculalacon; var i : integer; begin for i := 0 to 100000000 do inc(a); for i := 0 to 100000000 do dec(a); end; procedure TForm1.FormCreate(Sender: TObject); begin a := 0; end; procedure TForm1.Button1Click(Sender: TObject); var i, j : integer; rDuree, rStart, rEnd : real; begin rStart := now; for j := 0 to 30 do begin if CheckBox1.Checked then calculalacon else begin for i := 0 to 100000000 do inc(a); for i := 0 to 100000000 do dec(a); end; end; rEnd := now; rDuree := rEnd - rStart; edit1.Text := FloatToStr(rDuree); end; end.
{ ImagePixel } function imagePixel(aBitmap: TBitmap; aPixelX, aPixelY: integer): TColor; begin if assigned(aBitmap) then result := aBitmap.pixels[aPixelX, aPixelY]; // <-- hahaha lol ... utilise ScanLine hein. end; procedure TFormMain.ImageMouseUp(); // Oui ! begin LabelMouseSelect.Caption := format('$%.8x', [imagePixel(Image1.Picture.Bitmap, X, Y)]); end; procedure TFormMain.ButtonCornerClick(); // Oui ! begin LabelLeftTop.Caption := format('$%.8x', [imagePixel(Image1.Picture.Bitmap, 0, 0)]); LabelLeftBottom.Caption := format('$%.8x', [imagePixel(Image1.Picture.Bitmap, 0, Image1.Picture.Height-1)]); LabelRightBottom.Caption := format('$%.8x', [imagePixel(Image1.Picture.Bitmap, Image1.Picture.Width-1, 0)]); LabelRightTop.Caption := format('$%.8x', [imagePixel(Image1.Picture.Bitmap, Image1.Picture.Width-1, Image1.Picture.Height-1)]); end; procedure TFormMain.ButtonProcessClick(); // NON ! SURTOUT PAS ! à moins d'aimer les process qui plombes 10 minutes. var X, Y: integer; begin for Y := 0 to Image1.Picture.Height-1 do for X := 0 to Image1.Picture.Width-1 do ListBox1.Items.Add(format('$%.8x', [imagePixel(Image1.Picture.Bitmap, X, Y)])); end; { Image Pixels List } procedure ImagePixelsList(aBitmap: TBitmap; aStrings: TString); type PScanLine = ^TScanLine; TScanLine = array[0..0] of integer; var X, Y, W, H: integer; P : PScanLine; B: TBitmap; begin if not (assigned(aBitmap) and assigned(aStrings)) then exit; W := Image1.Picture.Width-1; H := Image1.Picture.Height-1; B := TBitmap.Create; try B.assign(aBitmap); B.PixelFormat := pf32bit; Strings.BeginUpdate; try Strings.Clear; for Y := 0 to H do begin P := B.ScanLine[Y]; for X := 0 to W do Strings.Add(format('$%.8x', [P^[X]])); end; finally Strings.EndUpdate; end; finally B.Free; end; end; procedure TFormMain.ButtonProcessOptimizedClick(); // Oui ! begin ImagePixelList(Image1.Picture.Bitmap, ListBox1.Items); end;
« @Cari : Spécifiquement sous Delphi ou d'une manière générale ? »
procedure TForm1.FormCreate(Sender: TObject); begin Edit1.Text := '999999'; Edit2.Text := '999999'; end; function Cube(X: Integer): Integer; begin Result := X*X*X; end; procedure TForm1.Button1Click(Sender: TObject); var i,C,X : Integer; Start, Elapsed : Int64; begin X := 123; Start := GetTickCount; for i := 0 to 100000000 do C := Cube(X); // <--- !!! Elapsed := GetTickCount-Start; if StrToInt(Edit1.Text) > Elapsed then Edit1.Text := IntToStr(Elapsed); //Meilleur temps: 406 milliseconds. end; procedure TForm1.Button2Click(Sender: TObject); var i,C,X : Integer; Start, Elapsed : Int64; begin X := 123; Start := GetTickCount; for i := 0 to 100000000 do C := X*X*X; // <--- !!! Elapsed := GetTickCount-Start; if StrToInt(Edit2.Text) > Elapsed then Edit2.Text := IntToStr(Elapsed); //Meilleur temps: 62 milliseconds (6 fois + rapide!). end;