Ga naar de hoofdnavigatie Ga naar de hoofdinhoud Ga naar de voettekst van de pagina
unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ExtDlgs,
  Menus, TL.Components, CCR.Exif;

type
  TForm1 = class(TLForm)
    OpenPictureDialog1: TOpenPictureDialog;
    Panel1: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Image1: TImage;
    ExifStr: TEdit;
    procedure Copy1Click(Sender: TObject);
    procedure Open1Click(Sender: TObject);
    procedure FormKeyDown(
      Sender: TObject;
      var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Copy1Click(Sender: TObject);
begin
  Self.ExifStr.SelectAll;
  Self.ExifStr.CopyToClipboard;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption:= 'Exif Extractor ' + Folder.AppVersion +
    ' - © 2021 Theo Langstraat   |   Open (Ctrl-O)   Copy Exif to Clipboard (Ctrl-C)';
end;

procedure TForm1.FormKeyDown(
  Sender: TObject;
  var Key: Word;
  Shift: TShiftState);
const
  KeyO = Ord('O');
  KeyC = Ord('C');
begin
  if ssCtrl in Shift then
    begin
      if Key = KeyO then
        Self.Open1Click(Self)
      else if Key = KeyC then
        Self.Copy1Click(Self);
    end;
end;

procedure TForm1.Open1Click(Sender: TObject);
var
  ExifData: TExifData;
  Aperture: double;
  ExifInfo, FocalLength, ShutterSpeed: string;
const
  DateFormat = 'dd-mm-yyyy';
begin
  if OpenPictureDialog1.Execute then
    begin
      if FileExists(OpenPictureDialog1.FileName) then
        begin
          ExifStr.Text:= '';
          ExifData:= TExifData.Create;
          try
            try
              ExifData.LoadFromGraphic(OpenPictureDialog1.FileName);
              Panel3.Caption:= 'Filename: ' + OpenPictureDialog1.FileName;
              Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);

              Aperture:= ExifData.FNumber.Numerator / ExifData.FNumber.Denominator;
              ShutterSpeed:= ExifData.ExposureTime.ToString;
              FocalLength:= ExifData.FocalLength.ToString;

              ExifInfo:= Format(
                'f/%.1f   %s   ISO-%s   @ %s   |   %s   %s   |   %s',
                [Aperture, ShutterSpeed, ExifData.ISOSpeedRatings.ToString, FocalLength, ExifData.CameraModel,
                ExifData.LensModel, ExifData.DateTimeOriginal.ToString(DateFormat)]);

              ExifStr.Text:= ExifInfo;
            except
              on E: Exception do
                raise Exception.Create('Error loading EXIF data: ' + E.Message);
            end;
          finally
            ExifData.Free;
          end;
        end
      else
        raise Exception.Create('File does not exist.');
    end;
end;

end.