Delphi 10 Seattleでプロジェクトマネージャから配置するファイルを追加する

Delphi XE7/C++Builder XE7から、プロジェクトマネージャから配置するファイルを追加・削除できるようになりました。
ドラッグアンドドロップで複数のファイルをまとめて登録できます。

プロジェクトマネージャからファイルを追加します。
右クリックから「追加」、または追加するファイルをドラッグアンドドロップします。

projectmanager01

projectmanager02

プロジェクトマネージャにファイルが追加されます。

projectmanager03

配置マネージャを見ると、追加したファイルが登録されています。

projectmanager04

登録したファイルの場所は、TPath.GetDocumentsPathで取得できます。

配置した画像を表示するサンプルコードです。

uses System.IOUtils;

procedure TForm1.FormCreate(Sender: TObject);
var
  Path: string;
begin
  Path := TPath.Combine(TPath.GetDocumentsPath, 'CHEMICAL.png');
  if TFile.Exists(Path) then
    Image1.Bitmap.LoadFromFile(Path);
  Path := TPath.Combine(TPath.GetDocumentsPath, 'FACTORY.png');
  if TFile.Exists(Path) then
    Image2.Bitmap.LoadFromFile(Path);
end;

android

ios

SaveStateでFireMonkeyの状態を保存するサンプル

Delphi XE7からFiremonkeyアプリケーションのフォームの状態を保存する機能を利用できるようになりました。

状態保存機能の使用例のサンプルです。

サンプルアプリケーション

フォーム上にTEditを配置します。

SaveState01

フォームの位置と大きさ、TEditに入力された文字列を保存・復元します。

状態を保存する

TJSONObjectを使って、フォームの状態を保存します。

uses
  System.JSON;

procedure TForm1.FormSaveState(Sender: TObject);
var
  JSON: TJSONObject;
  Writer: TBinaryWriter;
begin
  JSON := TJSONObject.Create;
  JSON.AddPair(
    'Left',
    TJSONNumber.Create(Self.Left));
  JSON.AddPair(
    'Top',
    TJSONNumber.Create(Self.Top));
  JSON.AddPair(
    'Width',
    TJSONNumber.Create(Self.Width));
  JSON.AddPair(
    'Height',
    TJSONNumber.Create(Self.Height));
  JSON.AddPair(
    'Text',
    Edit1.Text);

  SaveState.Stream.Clear;
  Writer := TBinaryWriter.Create(SaveState.Stream);
  try
    Writer.Write(JSON.ToJSON);
  finally
    Writer.Free;
  end;
  JSON.Free;
end;

状態を復元する

保存されている状態を読み込んで、復元します。

procedure TForm1.FormCreate(Sender: TObject);
var
  Reader: TBinaryReader;
  JSON: TJSONObject;
begin
  if (SaveState.Stream.Size > 0) then
  begin
    Reader := TBinaryReader.Create(SaveState.Stream);
    JSON := TJSONObject.ParseJSONValue(Reader.ReadString) as TJSONObject;

    Edit1.Text := JSON.Values['Text'].Value;
    Self.Left := (JSON.Values['Left'] as TJSONNumber).AsInt;
    Self.Top := (JSON.Values['Top'] as TJSONNumber).AsInt;
    Self.Width := (JSON.Values['Width'] as TJSONNumber).AsInt;
    Self.Height := (JSON.Values['Height'] as TJSONNumber).AsInt;

    JSON.Free;
    Reader.Free;
  end;
end;

アプリケーションを実行する

Edit1に入力して、フォームの位置をサイズを変更します。

アプリケーションを終了して、再び実行すると、フォームの位置とサイズ、入力した値が復元されます。

SaveState02

参考

DelphiのJSON関連の記事

入力欄(TEdit)に入力された値をOnValidateイベントやOnValidatingイベントで検証する

Delphi Firemonkeyアプリケーションでは、TEditのOnValidatingイベントやOnValidateイベントで、入力された値を検証し、修正することができます。
引数のTextを変更することで、入力されている値を変更できます。
OnValidatingイベントやOnValidateイベントはDelphi XE7以降で使用できます。

TEditに入力されるとOnValidatingイベントが発生します。

procedure TForm1.Edit1Validating(Sender: TObject; var Text: string);
begin
  //入力された値から「abc」を削除する
  Text := Text.Replace('abc', '', [rfReplaceAll]);
end;

TEditからフォーカスが離れるとOnValidateイベントが発生します。

procedure TForm1.Edit1Validate(Sender: TObject; var Text: string);
begin
  //入力された値が「.com」で終わっていない時は「.com」を追加する
  if not Text.EndsWith('.com') then
    Text := Text + '.com';
end;

Delphiの日付処理

Delphiでよく使う日付処理をまとめました。

現在の日付を求める

現在の日付を求めるには、System.DateUtils.TodaySystem.SysUtils.Dateを使用します。

時刻部分は午前0時です。

System.DateUtils.Todayの使用例

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;

System.SysUtils.Dateの使用例

var
  D: TDateTime;
begin
  D := System.SysUtils.Date;

現在の日時を取得する

現在の日時を取得するには、System.SysUtils.Nowを使用します。

var
  D: TDateTime;
begin
  D := System.SysUtils.Now;

現在の時刻を取得する

現在の時刻を取得するには、System.SysUtils.GetTimeを使用します。

日付部分は1899年12月30日です。

var
  D: TDateTime;
begin
  D := System.SysUtils.GetTime;

現在の日付を整数で取得する

日付から年を取得する場合は、System.DateUtils.YearOf
月を取得する場合は、System.DateUtils.MonthOf
日を取得する場合は、System.DateUtils.DayOf
を使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
  Year: Word;
  Month: Word;
  Day: Word;
begin
  D := System.DateUtils.Today;
  Year := System.DateUtils.YearOf(D);
  Month := System.DateUtils.MonthOf(D);
  Day := System.DateUtils.DayOf(D);

明日の日付を取得する

明日の日付を取得するには、System.DateUtils.Tomorrowを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Tomorrow;

昨日の日付を取得する

昨日の日付を取得するには、System.DateUtils.Yesterdayを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Yesterday;

指定の日付が存在するかどうか調べる

指定の日付が存在するかどうか調べるには、System.DateUtils.IsValidDateを使用します。

uses
  System.DateUtils;

begin
  if System.DateUtils.IsValidDate(2020, 2, 29) then
    ShowMessage('有効な日付です。')
  else
    ShowMessage('有効な日付ではありません。');

うるう年かどうか判定する

うるう年かどうか判定するには、System.SysUtils.IsLeapYearを使用します。

  if System.SysUtils.IsLeapYear(2020) then
    ShowMessage('うるう年です。')
  else
    ShowMessage('うるう年ではありません。');

指定された日付がうるう年であるかどうかを判定するには、System.DateUtils.IsInLeapYearを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  if System.DateUtils.IsInLeapYear(D) then
    ShowMessage('うるう年です。')
  else
    ShowMessage('うるう年ではありません。');

何日後、何日前の日付を求める

System.DateUtils.IncDayを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.DateUtils.IncDay(D, 10); // 10日後の日付

何日前の日付を求めるには、引数に負の値を指定します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.DateUtils.IncDay(D, -10); // 10日前の日付

何ヶ月後、何ヶ月前の日付を求める

何ヶ月後、何ヶ月前の日付を求めるには、System.SysUtils.IncMonthを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.SysUtils.IncMonth(D, 6); // 6ヶ月後

何ヶ月前の日付を求めるには、引数に負の値を指定します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.SysUtils.IncMonth(D, -6); // 6ヶ月前

何年後、何年前の日付を求める

何年後、何年前の日付を求めるには、System.DateUtils.IncYearを使用します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.DateUtils.IncYear(D, 10); // 10年後

何年前の日付を求めるには、引数に負の値を指定します。

uses
  System.DateUtils;

var
  D: TDateTime;
begin
  D := System.DateUtils.Today;
  D := System.DateUtils.IncYear(D, -10); // 10年前

月末日を求める

System.DateUtils.DaysInAMonthを使用すると、月の日数を取得できます。

uses
  System.DateUtils;

var
  Days: Word;
begin
  Days := System.DateUtils.DaysInAMonth(2020, 2); //2020年2月の日数

System.DateUtils.DaysInMonthを使用すると、DateTime値の月の日数を取得できます。

uses
  System.DateUtils;

var
  D: TDateTime;
  Days: Word;
begin
  D := System.DateUtils.Today;
  Days := System.DateUtils.DaysInMonth(D); //今月の日数