Hallo Community,
ich habe ein Problem mit der OnClick-Prozedur.
Ich habe mir ein Image auf das Form gesetzt und dieses mit einer OnClick Prozedur versehen.
Ich will einen Dateibrowser zum wählen von Symbolen aus DLLs und Exe-Dateien erstellen, der dann den IconIndex des gewählten Objekts an das aufrufende Form zurückgibt.
In meinem Programm verwende ich ein Array of TImage und weise diesen erstellten Komponeten das OnClick-Event vom Image zu.
Hier erstmal mein Quelltext:
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:
| unit symbloader;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ImgList, ExtCtrls, ShellAPI, Menus;
type Tsymbolloader = class(TForm) Label1: TLabel; Button1: TButton; Button2: TButton; ImageList1: TImageList; Image1: TImage; Label2: TLabel; Panel2: TPanel; Panel1: TPanel; ScrollBar1: TScrollBar; PopupMenu1: TPopupMenu; GroupBox1: TGroupBox; Image2: TImage; procedure ScrollBar1Change(Sender: TObject); procedure Image1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public procedure LoadIcons(sSourcePath: String); end;
var symbolloader: Tsymbolloader; ImageC: array of TImage; aUsedIcon: Integer = 0; implementation
{$R *.dfm}
procedure Tsymbolloader.Button1Click(Sender: TObject); begin Button2Click(Sender); end;
procedure Tsymbolloader.Button2Click(Sender: TObject); var i: Integer; begin i:=0; while (symbolloader.FindComponent('iconimage'+inttostr(i))<>nil) do begin imageC[i].free; Inc(i,1); end; symbolloader.Hide; end;
procedure Tsymbolloader.Image1Click(Sender: TObject); begin aUSedIcon:=StrToInt(((Sender)as TImage).Hint); Image2.Picture.Icon:=((Sender)as TImage).Picture.Icon; end;
procedure Tsymbolloader.LoadIcons(sSourcePath: String); var icon: TIcon; NumberOfIcons, i: Integer; begin Label2.Caption:=' '+ExtractFileName(sSourcePath)+' '; icon := TIcon.Create; try NumberOfIcons := ExtractIcon(Handle, PChar(sSourcePath), UINT(-1)); SetLength(imageC,NumberOfIcons - 1); Panel1.Width:=(NumberOfIcons div 6 + 1)*34 + 10; panel1.left:=1; Scrollbar1.Max:=(NumberOfIcons div 6 + 1); Scrollbar1.Position:=0; for i := 0 to NumberOfIcons - 1 do begin icon.Handle := ExtractIcon(Handle, PChar(sSourcePath), i); if not (symbolloader.FindComponent('iconimage'+inttostr(i))<>nil) then begin imageC[i]:= TImage.Create(Panel1); imageC[i].Name:='iconimage'+inttostr(i); OnClick:=Image1Click; end; imageC[i].Hint:=IntToStr(i); imageC[i].Picture.Icon:=icon; imageC[i].width:=32; imageC[i].height:=32; imageC[i].Center:=True; imageC[i].Top:=(i mod 6)*34 + 1; imageC[i].Left:=(i div 6)*34 + 1; end; finally icon.Free; end; if NumberOfIcons>0 then Image2.Picture.Icon:=imageC[0].Picture.Icon; symbolloader.Show; end;
procedure Tsymbolloader.ScrollBar1Change(Sender: TObject); begin Panel1.Left:=0 - Scrollbar1.Position*32; end;
end. |
Wenn ich auf ein Image in der Ansicht klicke passiert leider nix...kann mir jeman sagen, warum?
Finde den Fehler leider nicht...
MFG
DaKirsche
Im Anhang: Ein Screenshot des Forms.
Moderiert von
jasocul: Topic aus Dateizugriff verschoben am Fr 23.11.2007 um 13:25
Die simpelsten Fehler sind meist die Schwersten...