Delphi

ファイルをドラッグアンドドロップ @Delphi

バーコードを読み込ませるため、
都度都度スキャナで読み込むのは、面倒なので、
保存済みの画像を、ドラッグ&ドロップ(以下D&D)で、
処理できるようにした。


そのような、サンプルソースは、たくさんあるので、

今回は、これらを元に、実装した。

たしか、コンポーネントもあったはずだけど。

 

いずれも同じコードなので、詳細は、上記を見てもらうとして、

D&Dすると、エラーが出る・・・・
最小限の単独アプリにしても、エラーが出る。

具体的には、メモリーのアクセス違反になる。

※環境は、10.2 Tokyoが出ているにもかかわらず、XE2 !!(笑

***

エラー箇所は、D&Dした直後ではなく、画像を読取った後、
別のコンポーネントにAssignする時など、いつも同じ箇所で起きるわけでもなく、

手を変え品を変え、いろいろやってみたけど、まさかと思ったこのコード↓

//pFilenameに上で得たサイズ分のメモリを確保
pFilename := AllocMem(DropCount);

このPcharに動的に領域を割り当てようとする、この手続きだけど、

 

まさかと思ったけど、まさかだった!!

 

pFileName: PChar;

の宣言を、

pFileName: Array[0..MAX_PATH] of Char; // 固定長 = 260

に。

当然、動的に確保するAllocMem・FreeMemの手続きは、削除した結果、

 

 

エラーが、一切出ない!!

治った・・・?!

 

Unicode体系になったからだろうか?
文字の長さ(=byte)違うのが、原因だろうか?

わからないけど、

ちょっとくらいのメモリー、ケチったたところで、
このご時世じゃ、なんちゃーないわえ!(なんでもない@高知弁(草

-

TDBGridの右寄せ・センターリング @Delphi

新しいバージョンを買っているのに、移行せずに、
古いバージョンを使ってきたが、やっとXE2に着手。
最新は、10.2 Tokyo

XE5から、iOS/Androidの開発も出来るようになったので、
このバージョンまでは、保有しているが、
まだ、インストールすらしていない。

まだ、そこまで必要な案件がない・・・

***

TDBGridのカスタムドローで、センターリング・右寄せするには、
昔は、

with TDBGrid.canvas do begin
case Column.Alignment of
 taRightJustify:
  // 右寄せ
  LeftMargin := Column.Width - TextWidth(bufStr) - 4;
 taCenter:
  // 中央寄せ
  LeftMargin := (Column.Width - TextWidth(bufStr)) div 2;
 end;
 TextRect(Rect, Rect.Left + LeftMargin, Rect.Top + 2, bufStr);
end;

と、書いていたが、XE2にしてから、ずれるようになったので、
調べてみたところ、

今は、

with TDBGrid do begin
  case Column.Alignment of
    taRightJustify:
      // 右寄せ
      uFormat := DT_RIGHT or DT_SINGLELINE or DT_VCENTER;
    taCenter:
      // 中央寄せ
      uFormat := DT_CENTER or DT_SINGLELINE or DT_VCENTER;
    else
      uFormat := DT_LEFT or DT_SINGLELINE or DT_VCENTER;
  end;

  aRect      := Rect; // ※DrawTextは変数渡し(RectはConst)
  InflateRect(aRect, 0, 0);
  DrawText(Handle, PChar(bufstr), Length(bufstr), ARect, uFormat);
end;

と書くようだ。

参  >> TDBGrid の複数行選択とセルのカスタム描画 

 

また、XE2からスタイルテーマが選べるようになり、
黒塗りが出来るようになった。

しかし、上記カスタムドローをしちゃうと、背景が真っ白になったりするので、

Canvas.Font.Color :=TStyleManager.ActiveStyle.GetSystemColor(clWindowText)
// ※clWindowTextを、clbtnface、clWindowなどに、変更

を、追加することで、各テーマの標準色を取ってきてくれる。

 

客様の反応は、わからないけど、これで納品予定(笑

白バックって、三原色を放つため、光量が強すぎて、目には刺激が強すぎるが、
その点、黒バックって、目に優しいんですよね♪

昔のDOSの画面は、真っ黒に緑文字だったのに、
紙は白だけど、ディスプレイも白じゃないとって、誰が決めたんだろう?

PS.
最近見つけた、Windowsの新機能 >> 夜間モード

https://support.microsoft.com/ja-jp/help/4027563/windows-10-set-your-display-for-night-time

ブルーライトカットで、目が一瞬で楽になるのが、わかります。
お試しあれ!。

-