Hallo, ich hoffe ihr könnt mir mal wieder helfen.
Und zwar verwende ich folgenden Code um mir den Iconauswahldialog von Windows anzeigen zu lassen. Eigentlich funktioniert alles auch ganz gut, aber wenn der neu ausgewählte Pfad zu einem Icon länger ist als der alte, wird mir der Rest des Pfades abgeschnitten und ist somit nicht mehr brauchbar.
Hat einer von Euch vielleicht eine Idee was ich falsch mache?
Delphi-Quellcode:
function PickIconDlg(
Handle: THandle; FileName: PChar; FileNameSize: integer;
var IconIndex: Integer): Boolean;
stdcall;
external '
shell32.dll'
index 62;
procedure TfrmEditApp.PickIcon(hwndicon: HWND;
var iconfile :
string;
var iconindex: integer);
var
buf : widestring;
idx : Integer;
begin
SetLength(buf,MAX_PATH * 2);
ZeroMemory(@buf[1],length(buf));
buf := widestring(iconfile);
idx := iconindex;
if(PickIconDlg(hwndicon, PChar(PWideChar(buf)), length (buf), idx))
then
begin
buf := widestring(buf);
iconfile :=
string(buf);
iconindex := idx;
end;
end;
{*** Iconauswahldialog aufrufen ***}
procedure TfrmEditApp.btnIconDlgClick(Sender: TObject);
var
FileName :
String;
Idx: Integer;
begin
if aAppIcon.Text = '
'
then
begin
FileName := aAppPfad.Text;
Idx := 0;
end
else
begin
FileName := aAppIcon.Text;
Idx := StrToInt(aAppIconNr.Text);
end;
PickIcon(
Handle, Filename, Idx);
aAppIcon.Text := Filename;
aAppIconNr.Text := IntToStr(Idx);
end;