TPopupを使った半透明の数値入力フォームのサンプル

次のサンプルアプリケーションでは、電卓ボタンを押すと半透明の数値入力フォームが表示されます。
フォーカスが他のコンポーネントに移ると、数値入力フォームは自動的に閉じます。

osx01osx02

win01win02

フォームは次のようになります。

form01

数値入力フォームはTPopupコンポーネントを使って実現します。

form03

TGridPanelLayoutを使ってボタンを並べました。

form04

TPopupコンポーネントを表示すると次のようになります。
Opacityプロパティを「0.5」にしているため、半透明になり、下のコントロールが表示されています。

form02

電卓ボタンが押されると数値入力フォームを表示します。

procedure TForm1.Button1Click(Sender: TObject);
begin
  Popup1.PlacementTarget := Edit1;
  Popup1.IsOpen := True;
end;

TPopupコンポーネントのPlacementTargetプロパティにEdit1を設定して、Edit1の下にウィンドウを表示するようにします。

  Popup1.PlacementTarget := Edit1;

IsOpenプロパティをTrueにしてウィンドウを表示します。

  Popup1.IsOpen := True;

以上で、半透明の数値入力フォームが表示されます。

Delphi XE7のAndroidアプリケーションでWi-Fiの情報を取得する

Delphi XE7のAndroidアプリケーションでWi-Fiの情報を取得する方法です。

Java2OPでWifiManagerクラスとWifiInfoクラスのブリッジファイルを作成します。

Java2OP.exe -classes android.net.wifi.WifiManager android.net.wifi.WifiInfo -unit Androidapi.JNI.Wifi

プロジェクトオプションの「使用する権限」で「Wi-Fi 状態へのアクセス」を「true」にします。

WiFiInfo

TMemoコンポーネントにWi-Fiの情報を出力します。

uses
  Androidapi.JNI.Wifi,
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNIBridge;

procedure TForm1.FormCreate(Sender: TObject);
var
  Obj: JObject;
  WifiManager: JWifiManager;
  WifiInfo: JWifiInfo;
begin
  Obj := SharedActivityContext.getSystemService
    (TJContext.JavaClass.WIFI_SERVICE);
  if Obj = nil then
    Exit;
  WifiManager := TJWiFiManager.Wrap((Obj as ILocalObject).GetObjectID);
  WifiInfo := WifiManager.getConnectionInfo;
  Memo1.Lines.Add(Format('BSSID=%s', [JStringToString(WifiInfo.getBSSID)]));
  Memo1.Lines.Add(Format('IpAddress=%d', [WifiInfo.getIpAddress]));
  Memo1.Lines.Add(Format('LinkSpeed=%d', [WifiInfo.getLinkSpeed]));
  Memo1.Lines.Add(Format('MacAddress=%s', [JStringToString(WifiInfo.getMacAddress)]));
  Memo1.Lines.Add(Format('NetworkId=%d', [WifiInfo.getNetworkId]));
  Memo1.Lines.Add(Format('SSID=%s', [JStringToString(WifiInfo.getSSID)]));
end;

半透明のヘルプ画面を表示するには

フォームの上に、半透明のヘルプ画面を表示してみます。

サンプルアプリケーションの右上のヘルプボタンを押すと、使い方の説明が表示されます。

Androidアプリケーションの例

device-2015-02-28-231027

device-2015-02-28-231100

Windowsアプリケーションの例

win01

win02

フォームの構成です。

win03

Rectangle1はヘルプを表示するコンポーネントです。
初期状態では非表示(Visible=True)にしています。
Rectangle1を表示すると次のようになります。

win04

win05

Rectangle1は半透明にするため、FillプロパティのColorを「#44E0E0E0」にしています。

win06

Colorプロパティの値は「A(透明度)R(赤)G(緑)B(青)」で指定します。
透明度を「44」にしているため、半透明になり、下のコントロールが透けて見えます。

コンポーネントの設定ができたら、実行時にVisibleプロパティを変更するコードを記述して完成です。

procedure TForm1.ButtonHelpClick(Sender: TObject);
begin
  Rectangle1.Visible := not Rectangle1.Visible;
end;

FireDACでSQLiteの日付型を扱うには

SQLiteデータベースには日付型がありません。
FireDACには日付をうまく扱う仕組みが用意されています。

日付型のデータ表現を設定する

FireDAC接続エディタで日付型をどのようにデータベースに登録するかを設定できます。

「定義」タブの「DateTimeFormat」で「String」「Binary」「DateTime」から日付型の扱い方を選択します。

FDConnection00

DateTimeFormatが「String」のとき

DateTimeFormatを「String」にすると、’yyyy-mm-dd hh24:mi:ss’ 形式の文字列としてデータベースに格納されます。

可読性の高い格納方法です。

例:DateTimeFormatを「String」にして次のコードを実行します。

FDQuery1.SQL.Text := 'insert into TBL1(DAY) values(:DAY)';
FDQuery1.ParamByName('DAY').AsDateTime := Now;
FDQuery1.ExecSQL;

次の値が保存されました。

2015-02-28 19:56:07.106

DateTimeFormatが「Binary」のとき

DateTimeFormatを「Binary」にすると、ユリウス日を表す実数として格納します。

例:DateTimeFormatを「Binary」にして次のコードを実行します。

FDQuery1.SQL.Text := 'insert into TBL2(DAY) values(:DAY)';
FDQuery1.ParamByName('DAY').AsDateTime := Now;
FDQuery1.ExecSQL;

次の値が保存されました。

42063.832531875

DateTimeFormatが「DateTime」のとき

DateTimeFormatを「DateTime」にすると、TDateTime 値を表す実数として格納します。

例:DateTimeFormatを「DateTime」にして次のコードを実行します。

FDQuery1.SQL.Text := 'insert into TBL3(DAY) values(:DAY)';
FDQuery1.ParamByName('DAY').AsDateTime := Now;
FDQuery1.ExecSQL;

次の値が保存されました。

2457082.33325122