1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
Type TMyImage = Class(TImage) private R : TRect; FName : String; Caption : String;
public
Constructor Create(AOwner : TComponent; aFNAme : String; aHint : String; aX,aY : Integer); end; type TForm1 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private ExePath : String; FImages : Array of TMyImage;
Procedure IMOnClick(Sender : TObject);
public end;
var Form1: TForm1;
implementation
{$R *.dfm}
Constructor TMyImage.Create(AOwner : TComponent; aFName : String; aHint : String; aX,aY : Integer); begin Inherited Create(AOwner); Hint := aHint; ShowHint := True; FName := aFName; Autosize := True; Stretch := False; Picture.LoadFromFile(FName); Left := aX; Top := aY; R := Rect(Left,Top,Left+Width,Top+Height); end;
procedure TForm1.FormCreate(Sender: TObject); begin ExePath := ExtractFilePath(Application.ExeName)+'\'; Randomize; SetLength(FImages,0); end;
Procedure TForm1.IMOnClick(Sender : TObject); begin Application.MessageBox('hier ist besetzt, klick woanders','D e n k s t e',0); end;
procedure TForm1.FormMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); Var IM : TMyImage; IMFName : String; rx : Integer; z : Integer; R1,R2 : TRect; IsFree : Boolean;
begin rx := Random(100); If rx <= 33 then IMFName := '1.ico' else If rx <= 66 then IMFName := '2.ico' else IMFName := '3.ico'; IMFName := ExePath + IMFName;
IM := TMyImage.Create(Self,IMFName,'ich bin ein TMyImage',X,Y); R1 := IM.R; IsFree := True; For z := 0 to (Length(FImages)-1) do begin If InterSectRect(R2,R1,FImages[z].R) then begin IsFree := False; Application.MessageBox('hier auch nicht, zu eng','D e n k s t e',0); Break; end; end;
If IsFree then begin IM.Parent := Self; IM.OnClick := IMOnClick; SetLength(FImages,Length(FImages)+1); FImages[Length(FImages)-1] := IM; end else begin IM.Free; end;
end;
end. |