Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Try Except End; verschachteln

  Alt 5. Nov 2010, 23:43
Meine Variante:
Delphi-Quellcode:
//type
// Grad nicht sicher, ob es nen enstprechenden Typ schon gibt:
// TGraphicClass = class of TGraphic;

function CreateImageFromFile(const Filename: string): TGraphic;
var
  Adapter: TGraphicClass;
const
  ADAPTERS: array[0..2] of TGraphicClass = (TPNGObject, TJPEGImage, TBitmap);
begin
  Result := nil;
  for Adapter in ADAPTERS do
  begin
    if Assigned(Result) then break;
    Result := Adapter.Create;
    try
      Result.LoadFromFile(Filename);
    except
      FreeAndNil(Result);
    end;
  end;
  if not Assigned(Result) then
    raise EInvalidGraphic.CreateFmt('Unknown format: "%s"', [Filename]);
end;

var
  Graphic: TGraphic;
begin
  if (OpenDialog1.Execute) then
  begin
    try
      Graphic := CreateImageFromFile(OpenDialog1.FileName);
      try
        Image1.Picture.Graphic.Assign(Graphic);
      finally
        Graphic.Free;
      end;
    except
      on E: EInvalidGraphic do
        MessageBox(0, PChar(E.Message), 'Konnte Datei nicht laden', MB_OK or MB_ICONERROR);
      else
        raise E;
    end;
  end;
end;
Der Code ist ungetestet und soll nur zur Veranschaulichung dienen. Ich bin zudem grad nicht sicher, ob das mit der Konstantendeklaration so klappt -- ich kann mir nie merken, mit welchen Typen der Compiler das mitmacht und mit welchen nicht. Eventuell muss man die Konstante in eine Variable ändern und dann manuell befüllen.

Vorteil meiner Lösung: Lässt sich leicht erweitern.

@Satty67: TPicture unterscheidet aber afair nur nach Dateiendungen und das reicht dem OP nicht.

Geändert von Namenloser ( 5. Nov 2010 um 23:45 Uhr)
  Mit Zitat antworten Zitat