Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Диалог выбора значка...


Автор: V.Turecky 11.8.2002, 22:14
Всем привет. Нужна Ваша помощь. Следующая конструкция открывает "Диалог выбора значка". Проблема в том, что я не могу использовать строку FileName := ExtractFilePath(ParamStr(0))+'pfdimg.dll';
Помогите!

Код
procedure SelectIcon;
var
FileName: array[0..MAX_PATH - 1] of Char;
Size, Index: LongInt;
begin
Size := MAX_PATH;
//Если строкове значение, то всё работает:
//FileName := 'C:\Program Files\BLA\pfdimg.dll';
//А если вот это, то Incompatible types: 'Array' and 'String'
FileName := ExtractFilePath(ParamStr(0))+'pfdimg.dll';
 if PickIconDlgA(0, FileName, Size, Index) then begin
  if (Index <> -1) then
   frmMain.ImgShotcut2.Picture.Icon.Handle := ExtractIcon(hInstance, FileName, Index);
 end;
end;

Автор: Vit 12.8.2002, 00:59
Код
procedure SelectIcon;
var
FileName: String;
Size, Index: LongInt;
begin
Size := MAX_PATH;
FileName := ExtractFilePath(ParamStr(0))+'pfdimg.dll';
if PickIconDlgA(0, PChar(FileName), Size, Index) then begin
 if (Index <> -1) then
  frmMain.ImgShotcut2.Picture.Icon.Handle := ExtractIcon(hInstance, PChar(FileName), Index);
end;
end;

Автор: _pussbb 13.4.2007, 13:25
люди помогите хочу применить ваш программный код в своей проге на С++ но ничего не получаэться пробывал на дефи компильнуть ваш но тоже выводит ошибки короче говоря PickIconDlg инициализирован в ShlObj.h вставляю хедер файл но не работает  smile  smile  

Автор: ama_kid 13.4.2007, 14:04
Вот тебе код на дельфи - переводи  smile 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ShellAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TIconDialog = class(TObject)
    constructor Create(FileName:string);
    destructor Destroy; override;
    function Execute: Boolean;
  private
    { Private declarations }
    FIcon: TIcon;
    FFileName: String;
    FIndex: Integer;
    function GetAnyFile: String;
  protected
    { Protected declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  IconDialog: TIconDialog;
implementation

{$R *.dfm}

function PickIconDlg(OwnerWnd: HWND; lpstrFile: PWideChar; var nMaxFile: LongInt;
 var lpdwIconIndex: LongInt): LongBool; stdcall; external 'SHELL32.DLL' index 62;

constructor TIconDialog.Create(FileName:string);
begin
inherited Create;
FFileName:=FileName;
FIcon := TIcon.Create;
end;

destructor TIconDialog.Destroy;
begin
FIcon.Free;
inherited Destroy;
end;

function TIconDialog.Execute: Boolean;
var
zFileName: array [0..MAX_PATH - 1] of AnsiChar;
zwFileName: array [0..MAX_PATH - 1] of WideChar;
zSize, zIndex: LongInt;
begin
 if not ((FFileName <> '') and FileExists(FFileName)) then FFileName:=GetDefaultFile;
 StrPCopy(zFileName,FFileName);

 Result := PickIconDlg(0,StringToOleStr(FFileName),zSize,zIndex);
 FIndex := zIndex;
 if (FFileName <> '') and (FIndex <> -1) then
 begin
  FIcon.Handle := ExtractIcon(hInstance,zFileName,zIndex);
 end;
end;

function TIconDialog.GetDefaultFile: String;
var
 zSysDir: array [0..MAX_PATH - 1] of Char;
 SysDir: String;
begin
GetSystemDirectory(zSysDir,255);
SysDir := StrPas(zSysDir);
if SysDir[Length(SysDir)] <> '\' then
 begin
  SysDir := SysDir + '\';
 end;
Result := SysDir + 'SHELL32.DLL';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 IconDialog:=TIconDialog.Create('');
 IconDialog.Execute;
end;

end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)