-1

画像を作成してこれらの画像に読み込む手順ですが、OnClick 手順を作成して、どの画像をクリックしているかを判断するにはどうすればよいですか?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, jpeg, ExtCtrls, Math, StdCtrls;

type
  TForm1 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
procedure ImageClick(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;

var
 Form1: TForm1;
 Box: array [1..8,1..8] of TImage;
 size: integer;

implementation


{$R *.dfm}

procedure imagecreation;
var i,j: integer;
begin
  size:=60;
  for i:=1 to 8 do
    begin
      for j:=1 to 8 do
        begin
      box[i,j]:=Timage.Create(Form1);
      box[i,j].AutoSize:=false;
      box[i,j].Proportional:=true;
      box[i,j].Width:=size;
      box[i,j].Height:=size;
      box[i,j].Top:=(i+1)*size;
      box[i,j].Left:=(j+1)*size;
      box[i,j].Parent:=Form1;
      box[i,j].OnClick:=ImageClick;
        end;
    end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  imagecreation;
end;

procedure TForm1.ImageClick(Sender: TObject);
var
  ClickedImage: TImage;
begin
  ClickedImage := Sender as TImage;
end;
end.

その時点で「ImageClick」と宣言されていない識別子を呼び出します。これらはどのように宣言されていますか?

4

2 に答える 2

2

フォームまたは他のクラスを取得した場合は、そこにメソッドを定義して、すべての画像に添付できます。

// The event handler
procedure TForm1.ImageClick(Sender: TObject);
var
  Image: TImage;
begin
  // Senders points to the image clicked
  Image := Sender as TImage;
  // Use Image as you like. 
end;

// Creating the images.
procedure TForm1.CreateImage;
var
  Image: TImage;
begin
  Image := TImage.Create(Self);
  // Set parent, load picture, etc.
  Image.OnClick := ImageClick; // Attach the event.
end;
于 2012-12-22T17:39:55.257 に答える
1

共通の OnClick ハンドラーを作成します (たとえば、フォーム上に):

procedure TForm1.ImageClick(Sender: TObject);
var
  ClickedImage: TImage;
begin
  ClickedImage := Sender as TImage;
  // Do whatever with the image clicked
end;

(ヒント: 上記のコードをコード エディターに入力したら、Ctrl+ Shift+Cを押すと、IDE によってフォームのインターフェイスに宣言が自動的に追加されます。)

画像を作成して配列に割り当てるときは、そのOnClickイベントを上記のものに設定します。

for i:=1 to 8 do 
begin 
  for j:=1 to 8 do 
  begin      
    Images[i, j] := TImage.Create(nil);
    Images[i, j].OnClick := ImageClick;
    Images[i, j].LoadFromFile(AnImageFilename);
    // Other settings for image
  end;
end;

編集:コードを投稿したので、問題はimagecreation、フォームのメソッドを作成できなかったため、どこにあるかがわからないことImageClickです。からコードを変更することで修正できます

procedure imagecreation;

procedure TForm1.imagecreation;

以前に提供したショートカットを使用して、フォームのインターフェイス宣言に追加します。

于 2012-12-22T17:40:17.563 に答える