最近受老板迫害,必须把一个系统写成图像热点的方式。
具体是这样要求的:
  使用image显示图片,然后根据用户给定的数字,动态在image上面生成多少个按钮,然后要求,按钮能在image上面托动要所需要的位置,然后还要把这个位置能保存下来,以便以后能调用显示,请问怎么做阿。
  不知道有没有类似的控件!大哥门帮帮忙啊!

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2947/2947750.xml?temp=.1719324unit Resizer;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls;const
       GRIDDEFAULT = 4;type
       TResizer = class;
       TMover = class;   TMovingEvent = procedure(Sender: TResizer; var NewLeft, NewTop: integer) of object;
       TSizingEvent = procedure(Sender: TResizer; var NewLeft, NewTop, NewWidth, NewHeight: integer) of object;   TResizer = class(TComponent)
       protected
          FActive     : boolean;
          FControl    : TControl;
          Sizers      : TList;
          GroupMovers : TList;
          FGroup      : TWinControl;
          FGridX      : integer;
          FGridY      : integer;
          FOnSized    : TNotifyEvent;
          FOnSizing   : TSizingEvent;
          FOnMoved    : TNotifyEvent;
          FOnMoving   : TMovingEvent;
          Sizing      : boolean;
          Moving      : boolean;
          OrigSize    : TRect;
          NewSize     : TRect;
          DownX       : integer;
          DownY       : integer;
          FAllowSize  : boolean;
          FAllowMove  : boolean;
          FKeepIn     : boolean;
          FHotTrack   : boolean;
          OneMover    : TMover;
          CurMover    : TMover;
          procedure   Notification(AComponent: TComponent; Operation: TOperation); override;
          procedure   SetActive(b: boolean);
          procedure   SetControl(c: TControl);
          procedure   SetGroup(p: TWinControl);
          procedure   CreateSizers;
          procedure   CheckSizers;
          procedure   ShowSizers;
          procedure   HideSizers;
          procedure   SizerDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
          procedure   SizerUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
          procedure   SizerMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
          procedure   MoverDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
          procedure   MoverUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
          procedure   MoverMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
          procedure   DrawSizeRect(Rect: TRect);
          procedure   Calc_Size_Rect(SizerNum, dx, dy: integer);
          procedure   DoSizingEvent;
          procedure   Calc_Move_Rect(dx, dy: integer);
          procedure   DoMovingEvent;
          procedure   Constrain_Size;
          procedure   Constrain_Move;
          procedure   MoverKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
          procedure   DoSizeMove(var Key: Word; Shift: TShiftState; dx, dy: integer);
          procedure   CreateGroupMovers;
          procedure   CreateOneMover(m: TMover; c: TControl);
          function    FindMoverByBuddy(c: TControl): TMover;
       public
          constructor Create(AOwner: TComponent); override;
          destructor  Destroy; override;
       published
          property    Active: boolean read FActive write SetActive default True;
          property    ResizeControl: TControl read FControl write SetControl;
          property    ResizeGroup: TWinControl read FGroup write SetGroup;
          property    GridX: integer read FGridX write FGridX default GRIDDEFAULT;
          property    GridY: integer read FGridY write FGridY default GRIDDEFAULT;
          property    OnSized: TNotifyEvent read FOnSized write FOnSized;
          property    OnSizing: TSizingEvent read FOnSizing write FOnSizing;
          property    OnMoved: TNotifyEvent read FOnMoved write FOnMoved;
          property    OnMoving: TMovingEvent read FOnMoving write FOnMoving;
          property    AllowSize: boolean read FAllowSize write FAllowSize default True;
          property    AllowMove: boolean read FAllowMove write FAllowMove default True;
          property    KeepInParent: boolean read FKeepIn write FKeepIn default True;
          property    HotTrack: boolean read FHotTrack write FHotTrack;
       end;   TInvisWin = class(TPanel)     // This could also derive from TPanel
       protected
          procedure WndProc(var Message: TMessage); override;
          procedure CreateParams(var Params: TCreateParams); override;
          procedure WMDLGCode(var Message: TMessage); message WM_GETDLGCODE;
       public
          property  OnKeyDown;
       end;   TMover = class(TInvisWin)
       public
          Buddy     : TControl;
          procedure Show;
       end;