![]() |
Format mit SysErrorMessage(..)
hi,
in meinem dateimanager können ganz normal dateien mit shellexecute geöffnet werden. falls ein fehler auftritt, soll eine meldung ausgegeben werden.
Delphi-Quellcode:
dies klappt auch ganz gut, allerdings tritt bei fehler ERROR_BAD_EXE_FORMAT (nr 193) ein "%1" in der meldung (%1 ist keine zulässige Win32-Anwendung) auf. ich möchte apikonform das %1 (oder falls es ein "%2" geben sollte) durch den entsprechenden wert ersetzen (hier anscheinend der dateiname)! wie mache ich das???
function TWinMain.shell_open(dirname, filename: PChar): Cardinal;
const OPEN_OR_EXP: array[Boolean] of PChar = ('open', 'explore'); begin if(filename = nil) then filename := '.'; ShellExecute(Application.Handle, OPEN_OR_EXP[mi_open_exp.Checked and (filename = '.')], filename, nil, dirname, SW_SHOWNORMAL); Result := GetLastError(); if(Result = ERROR_NO_ASSOCIATION) then begin if Application.MessageBox(PChar(SysErrorMessage(Result)+'.'+#10#13#10#13+'Möchten Sie manuell ein geeignetes Programm auswählen?'),APP_NAME,MB_YESNO or MB_ICONQUESTION) = mrYes then ShellExecute(Application.Handle, 'open', 'rundll32.exe', PChar('shell32.dll, OpenAs_RunDLL '+dirname+filename), nil, SW_SHOWNORMAL); end else if(Result <> ERROR_SUCCESS) then Application.MessageBox(PChar(SysErrorMessage(Result))+'.'+#10#13+'(Fehlercode '+IntToStr(Result)+')'),APP_NAME,MB_OK or MB_ICONSTOP); end; PLEASE HELP!!! |
Re: Format mit SysErrorMessage(..)
Vielleicht so:
Delphi-Quellcode:
Und statt #10#13 solltest du vielleicht sLineBreak (das ist #13#10) verwenden.
Format(SysErrorMessage(193), [FileName]);
Grüße vom marabu |
Re: Format mit SysErrorMessage(..)
Das Problem ist, dass du den PChar() TypeCast direkt hinter dem SysErrorMessage() beendest anstatt erst den String zusammen zu bauen und dann den Typecast durch zu führen.
|
Re: Format mit SysErrorMessage(..)
Zitat:
nee war nur ein kleiner kopierfehler^^ Zitat:
soweit war ich auch schon... probiers mal selbst in einem testprogramm... da kommt ein fehler (Format '%1' ungültig oder nicht kompatibel mit Argument.) Zitat:
kannte die konstante noch nicht... werde das umschreiben |
Re: Format mit SysErrorMessage(..)
Du kannst die %1 vorher in ein %s umwandeln:
Delphi-Quellcode:
Grüße
var
msg: String; begin msg := StringReplace(SysErrorMessage(193), '%1', '%s', [rfReplaceAll]); ShowMessage(Format(msg, [FileName])); end; |
Re: Format mit SysErrorMessage(..)
Zitat:
aha... dann kann ich ja auch gleich '%1' mit FileName ersetzen ;) ich frage mal anders: wie macht das windows?? |
Re: Format mit SysErrorMessage(..)
Guten Morgen,
ja, da hast du natürlich Recht. Windows selbst verwendet vermutlich die API Funktion FormatMessage(). Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 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