我正在尝试创建一个自定义组件,当鼠标移过它时显示一个图标.
我正在加载这样的图标:
我正在加载这样的图标:
UNIT Test; constructor TTestPath.Create(aOwner: TComponent); VAR myIcon: TIcon; begin inherited Create(aOwner); ImgList:= timageList.Create(Self); myicon := TIcon.Create; TRY myicon.LoadFromresourceName(HInstance,'FOLDER'); <------ this becomes application's icon! ImgList.AddIcon(myicon); FINALLY FreeAndNil(myicon); end;
问题是,只要我将Test.pas添加到我的测试应用程序的USES原因中,应用程序的图标(红色delphi头盔)就会被“FOLDER”图标替换.
更新:
EXE文件中的图标按以下顺序排列:’FOLDER’,Default_Delphi_icon
因此,TTestPath的图标被添加到exe BEFORE应用程序的图标中.
这里有什么问题:TTestPath的图标在EXE文件中以这种方式出现,或者它放在应用程序的(默认)图标之前?
控制代码如下:
UNIT test; INTERFACE USES System.SysUtils,Winapi.Windows,System.Classes,Vcl.StdCtrls,Vcl.Controls,Vcl.Graphics,vcl.imglist,Vcl.ExtCtrls; {$WARN GARBAGE OFF} {Silent the: 'W1011 Text after final END' warning } TYPE TValidity= (vaNone,vaValid,vaInvalid); { normal / Green / Red color } TInputType= (itFile,itFolder); { What kind of path will the user type in this control: folder or file } TTestPath = class(TCustomGroupBox) private edtPath : TButtonedEdit; btnApply : TButton; btnExplore : TButton; FInputType : TInputType; imgList : timageList; FShowApplyBtn: Boolean; protected public constructor Create(aOwner: TComponent); override; published property Align; property Anchors; property BiDiMode; property Caption; property Color; property Constraints; property Ctl3D; property DockSite; property DoubleBuffered; property DragCursor; property DragKind; property DragMode; property Enabled; property Font; property Padding; property ParentBackground default True; property ParentBiDiMode; property ParentColor; property ParentCtl3D; property ParentDoubleBuffered; property ParentFont; property ParentShowHint; property PopupMenu; property ShowHint; property TabOrder; property TabStop; property Touch; property Visible; property StyleElements; property OnAlignInsertBefore; property OnAlignPosition; property OnClick; property OnContextPopup; property OnDblClick; property OnDragDrop; property OnDockDrop; property OnDockOver; property OnDragOver; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnGesture; property OnGetSiteInfo; property OnMouseActivate; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property onmouseup; property OnStartDock; property OnStartDrag; property OnUnDock; end; procedure Register; IMPLEMENTATION {$R cPathEdit.res} USES cIO; constructor TTestPath.Create(aOwner: TComponent); VAR myIcon: TIcon; begin inherited Create(aOwner); Caption := 'Folder'; Height:= 41; FShowApplyBtn:= TRUE; ImgList:= timageList.Create(Self); { Freed by Self } myicon := TIcon.Create; TRY myicon.LoadFromresourceName(HInstance,'FOLDER'); ImgList.AddIcon(myicon); myicon.LoadFromresourceName(HInstance,'FOLDER_OPEN'); ImgList.AddIcon(myicon); FINALLY FreeAndNil(myicon); end; edtPath:= TButtonedEdit.Create(Self); WITH edtPath DO begin Parent := Self; Align := alClient; Margins.Left := 1; Margins.Top := 2; Margins.Right := 1; Margins.Bottom := 1; AlignWithMargins := TRUE; Images := imgList; TabOrder := 0 ; OnChange := nil; RightButton.Hint := 'browse for a folder'; RightButton.ImageIndex:= 0; RightButton.HotimageIndex:= 1; RightButton.Visible := TRUE; OnRightButtonClick := nil; OnKeyPress := nil; end; btnExplore:= TButton.Create(Self); WITH btnExplore DO begin Parent := Self; Align := alRight; Width := 22; Margins.Left := 1; Margins.Top := 1; Margins.Right := 1; Margins.Bottom := 1; AlignWithMargins := TRUE; Caption := '^'; TabOrder := 1; Hint := 'Open this folder in Windows Explorer'; OnClick := nil; end; btnApply:= TButton.Create(Self); WITH btnApply DO begin Parent := Self; Align := alRight; Width := 38; Margins.Left := 1; Margins.Top := 1; Margins.Right := 1; Margins.Bottom := 1; AlignWithMargins := TRUE; Hint := 'Create folder if necessary'; Caption := 'Apply'; TabOrder := 2; OnClick := nil; end; FInputType:= itFolder; end; procedure Register; begin RegisterComponents('xxx',[TTestPath]); end; end.
测试应用:
unit Unit1; interface uses Winapi.Windows,Winapi.Messages,System.SysUtils,Forms,test; <-------- this type TForm1 = class(TForm) private public end; var Form1: TForm1; IMPLEMENTATION {$R *.dfm} end.