试着写一个最简单的控件,我想要那种像是picture控件中点击加载图片弹出来一个对话框效果,但我不知道怎么弄!

解决方案 »

  1.   

    你直接在 image控件的onclick时间中加入 if opendialog.execute() then ....
    不行么?
    干嘛去弄自己的控件
      

  2.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, jpeg;type
      TMyImage = class(TImage)
      private
        MyOpenDialog: TOpenDialog;
        procedure ImageDBClick(Sender: TObject);
      public
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
      end;  TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Private declarations }
        MyImage: TMyImage;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TMyImage }constructor TMyImage.Create(AOwner: TComponent);
    begin
      inherited;
      AutoSize := False;
      Center := True;
      OnDblClick := ImageDBClick;
      MyOpenDialog := TOpenDialog.Create(AOwner);
    end;procedure TMyImage.ImageDBClick(Sender: TObject);
    begin
      if MyOpenDialog.Execute then
        Self.Picture.LoadFromFile(MyOpenDialog.FileName);
    end;destructor TMyImage.Destroy;
    begin
      if Assigned(MyOpenDialog) then
        FreeAndNil(MyOpenDialog);
      inherited;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      MyImage := TMyImage.Create(Self);
      MyImage.Parent := Self;
      MyImage.SetBounds(200, 200, 200, 200);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      if Assigned(MyImage) then
        FreeAndNil(MyImage);
    end;procedure TForm1.FormShow(Sender: TObject);
    begin
      MyImage.OnDblClick(MyImage);
    end;end.