Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pfad beim PickIconDialog wird gekürzt (https://www.delphipraxis.net/42616-pfad-beim-pickicondialog-wird-gekuerzt.html)

ringli 21. Mär 2005 16:50


Pfad beim PickIconDialog wird gekürzt
 
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? :gruebel:

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;

shmia 22. Mär 2005 09:35

Re: Pfad beim PickIconDialog wird gekürzt
 
Zitat:

Zitat von ringli
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.

Delphi-Quellcode:
// Fehler: die Procedure PickIcon sollte ein ganz normale Prozedure sein,
// keine METHODE von TfrmEditApp
procedure TfrmEditApp.PickIcon(hwndicon: HWND; var iconfile : string; var iconindex: integer);
var
  buf : widestring;
  idx : Integer;
begin
  // buf wird mit korrekter Länge angelegt
  SetLength(buf,MAX_PATH * 2);
  ZeroMemory(@buf[1],length(buf));

  // Fehler: Buffer wird durch neuen String ersetzt
  buf := widestring(iconfile);

  // Richtig (aber ungetestet)
  StringToWideChar(iconfile, @buf[1],length(buf));

ringli 22. Mär 2005 15:02

Re: Pfad beim PickIconDialog wird gekürzt
 
Delphi-Quellcode:
// Richtig (aber ungetestet)
  StringToWideChar(iconfile, @buf[1],length(buf));
So funktionierts! :dancer:

Vielen, vielen Dank für deine Hilfe. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz