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;

XE8でTListBoxのScrollByメソッドが動かない問題が修正された

XE7までは、スクロールバーが表示されていないと、TListBoxのScrollByメソッドを呼んでもスクロールされませんでした。

XE8では、スクロールバーが表示されていなくても、スクロールされるようになりました。

XE7を使っている場合は、TCustomScrollBox.ScrollByのスクロールバーのVisibleプロパティのチェックを外しまします。

参考