AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Format mit SysErrorMessage(..)

Ein Thema von silentAMD · begonnen am 29. Okt 2006 · letzter Beitrag vom 30. Okt 2006
Antwort Antwort
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#1

Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 14:36
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:
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;
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???


PLEASE HELP!!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 14:54
Vielleicht so:

 Format(SysErrorMessage(193), [FileName]); Und statt #10#13 solltest du vielleicht sLineBreak (das ist #13#10) verwenden.

Grüße vom marabu
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 16:13
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.
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 16:49
Zitat von Muetze1:
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.

nee war nur ein kleiner kopierfehler^^



Zitat von marabu:
Vielleicht so:

 Format(SysErrorMessage(193), [FileName]);

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 von marabu:
Und statt #10#13 solltest du vielleicht sLineBreak (das ist #13#10) verwenden.

kannte die konstante noch nicht... werde das umschreiben
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 17:44
Du kannst die %1 vorher in ein %s umwandeln:

Delphi-Quellcode:
var
  msg: String;
begin
  msg := StringReplace(SysErrorMessage(193), '%1', '%s', [rfReplaceAll]);
  ShowMessage(Format(msg, [FileName]));
end;
Grüße
  Mit Zitat antworten Zitat
silentAMD

Registriert seit: 27. Sep 2003
203 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Format mit SysErrorMessage(..)

  Alt 29. Okt 2006, 21:29
Zitat von marabu:
Du kannst die %1 vorher in ein %s umwandeln:

Delphi-Quellcode:
var
  msg: String;
begin
  msg := StringReplace(SysErrorMessage(193), '%1', '%s', [rfReplaceAll]);
  ShowMessage(Format(msg, [FileName]));
end;

aha... dann kann ich ja auch gleich '%1' mit FileName ersetzen



ich frage mal anders: wie macht das windows??
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Format mit SysErrorMessage(..)

  Alt 30. Okt 2006, 05:57
Guten Morgen,

ja, da hast du natürlich Recht. Windows selbst verwendet vermutlich die API Funktion FormatMessage().

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz