IT転職専門のJOBCENTERで、念願のIT業界へ転身。
どんなサービスか興味がある方はこちらをご覧ください。
★カテゴリ別・アーカイブなどはこちら★
さて、久々にDelphi ネタですが、相変わらずFMX版 TStringGrid に問題あり。
TMS Component のFMX版を導入しようかと悩みましたが、とりあえず当面の問題を回避
できましたので、備忘録として。。

Grid のスクロール外の罫線、色が消えてしまう問題に関しましては、
以前のブログで紹介したとおり。
少し手が加えられたのかポイントとなる行番号が違いますが、少し下の行をみれば
問題ないでしょう。

今回は、セル内のAlign 設定の問題。
Webを検索すると、主に海外サイトでいろいろと解決方法が記述されていますが、
前回同様、 Grid そのものを改造してしまうほうが良いでしょう。

4か所ほどソースを追加・修正

1. 115行目あたり

 TColumn = class(TStyledControl)
  private const
    HorzTextMargin = 2;
    VertTextMargin = 1;
  private
    FReadOnly: Boolean;
    FHorizontalAlign:TTextAlign; // <---- Add this line AriyukiTano
    FEditMode: Integer;
    FApplyImmediately: boolean;


2. 173行目あたり

    procedure UpdateCell(ARow: Integer);
  published
    property HorizontalAlign: TTextAlign read FHorizontalAlign write FHorizontalAlign; // <--- add this line Ariyuki Tano
    property ClipChildren default False;

3. 1212行目あたり

    Layout.BeginUpdate;
    try
      Layout.TopLeft := R.TopLeft;
      Layout.Text := ValueToString(Value);
      Layout.MaxSize := PointF(Width, Grid.RowHeight);
      Layout.WordWrap := False;
      Layout.Opacity := AbsoluteOpacity;
      //Layout.HorizontalAlign := Grid.TextSettingsControl.ResultingTextSettings.HorzAlign; <--- commnet out
      Layout.HorizontalAlign := HorizontalAlign;  //  <--- add this line Ariyuki Tano
      Layout.Padding.Right := 5; // <--- add this line Ariyuki Tano
      Layout.VerticalAlign := Grid.TextSettingsControl.ResultingTextSettings.VertAlign;
      Layout.Font.Assign(Grid.TextSettingsControl.ResultingTextSettings.Font);
      Layout.Color := Grid.TextSettingsControl.ResultingTextSettings.FontColor;
      Layout.Trimming := TTextTrimming.Character;
    finally
      Layout.EndUpdate;
    end;
    Layout.RenderLayout(Canvas);

HorizontalAlign プロパティを使えるようにしたのと、

Padding.Rightの設定をして、右寄せの時に罫線に重ならないようにしました。

sample.jpg

設定の方法ですが、FormActivate などで、



StringColumn.HorizontalAlign := TTextAlign.Leading; //左寄せ
StringColumn.HorizontalAlign := TTextAlign.Center;   //センター
StringColumn.HorizontalAlign := TTextAlign.Trailing;  //右寄せ


Gridはプロジェクトと同じフォルダにコピーして、プロジェクトに追加して、
Unit 名を Grid に変更して保存。
利用は、uses に FMX.Grid となっていたところを Grid に書き換ればOKです。


■実行時にOSを判別してStyleBookにスタイルを設定する方法
フォームにStyleBookオブジェクトを4つ追加して、
下記のようにNameを変更。
sbWin
sbMac
sbiOS
sbAnd

フォームクリエイト時の処理として下記のようコーディング。

procedure TfrmMainMenu.FormCreate(Sender: TObject);
var
  OSVer : TOSVersion;
begin
  //OSを判別して変数にセット
  case OSVer.Platform of
    pfWindows : styleBookName :='sbWin';
    pfMacOS   : styleBookName :='sbMac';
    pfiOS     : styleBookName :='sbiOS';
    pfAndroid : styleBookName :='sbAnd';
  end;

  //OS別のスタイルを設定する。
  frmMainMenu.StyleBook := TStyleBook(FindComponent(styleBookName));
end; 

先日、Embarcadero より、Delphi 10 Seattle が発売されました。
Windows のバージョン番号と同様に、9が飛ばされました。(笑)

Windows 10 スタイルにも対応しているということで、
これから試していきたいと思います。

個人的には、Android と iOS のネイティブコントロールでの表示に対応した
というのが一番大きいポイントかと思います。

Delphi のFireMonkey でレンダリングされたEdit コントロールは、
レスポンスが遅くて、入力に耐えられないと感じていました。
少々デザイン的な部分で、統一感がなくなってしまいますが、
レスポンスは重要ですので、このくらいはOKです。

MS のXamarinのマルチプラットフォームの方向性は違いますが、
個人的には、Delphiの方向性が好きですね。

今年、来年とこの方向性を強化したいと思います。

スマホのクロスプラットフォーム開発については、この数年間なやんでいますが、
一つ一つの案件を通して、その時々に考えています。

ネイティブかHTMLかという論争をしばしば見かけますが、
私の考えでは、そこは敢えて限定しないことにしています。

それはやはり一長一短だからです。

今現在 (2015.5.12) のタイミングでは、私はつぎのように考えています。

■ 業務システム
★一押し : Delphi XE8 

理由: 
Android、iOS、Windows、Mac に対応していて、ネイティブアプリが作成できるからです。
開発環境はまだまだ改善の余地はありますが、XE8 はだいぶ落ち着いてきましたので、
まさに今が旬ではないでしょうか?
欲を言えば、Android、iOSに各種データベースに接続するドライバがWinのようにあれば
幸せなのですが、それがないため、データベースへの接続は、RESTかDataSnapサーバを
介したデータアクセスというのが少々面倒くさいですが、それはAndroidアプリをJavaで
書いても一緒なのでこれはDelphiに限った話ではありません。
言語がPascalということで経験のない方は少々敬遠するかもしれませんが、
非常に習得しやすい言語だと思います。

▲次点 :  Xamarin
MSが提供する環境で構築するのであればXamarinとなるかもしれませんが、
私は今のところあまり食指がわかない状態です。というのもロジックは共通でも
UIはOS毎に別々ですので、開発工数から見てもクロスプラットフォーム開発と思えない
ところがあります。今後に期待。

■ゲーム系
★一押し : Unity5
とにかく、ほとんどのプラットフォームに対応している3D開発環境ですので、
ゲーム系ではこれがいいと思います。最近のバージョンでは、苦手とされてきた、
2D系の処理やUI設計などが強化されていい感じになってきています。
また、Visual Studio for Unity もありますので、使いづらいMonoを使わなくても、
良くなったというのが大きいです。
難点と言えば、少々バッテリーを多く消費してしまうところでしょうか?


あとは、そんなにレスポンスのスピードが要求されないのであれば、
HTMLという選択肢が浮上してきます。
ただし、WebのUIは、作業効率が悪いのと、ブラウザ毎の差異の吸収が大変なところが、
ちょっと減点対象ですね。


先日、Delphi XE8 が発売されました。
さすがに半年に一回のメジャーリリースは早すぎる気もしますが、年間サポート契約していますので、XE7からXE8 は無料でアップグレードできました。よかった。

さてさて、XE8 の通常のレビューは、他の人にお任せするとして、
開発している中でTStringGrid の挙動がおかしいので、バグを修正しました。

図1 . バグ画面

StringGrid_bug.jpg

バグの内容は2点。
グリッドの項目を横スクロールバーがでるまで追加したとき、
実行時に横スクロールすると、罫線と背景が描画されないという症状です。
Delphiの仲間に聞いたところ、XE8で修正されていますというお話があり、
ソース(FMX.Grid.pas )を確認したところ、ソースが間違っていました。
自分のプロジェクトファイルにFMX.Grid.pas をコピーして、
Grid.pas などに名前を変更して、下記修正を行って、
uses節 に Grid を追加すればOKです。

図2. 修正後

StringGrid_fixed.jpg

■罫線バグ (2292行目)  ※XE7 --> XE8 で修正されている。 (情報源 : Delphiユーザー会 細川様)
修正前 P := TPointF.Create(0, TopRow * FRowHeight);
修正後 P := TPointF.Create(Abs(Min(0, Content.Position.X)), TopRow * FRowHeight);

■AlternatingRowBackGround 背景バグ (2152行目) ※XE8でも直っていない
修正前 Canvas.FillRect(RectF(P.X, P.Y, P.X + Content.Width,
修正後 Canvas.FillRect(RectF(P.X, P.Y, P.X + ContentBounds.Width,

エンバカデロ様、標準コンポーネントのバグFIXよろしくお願いします。。
Delphi XE7 が発売されましたので、
早速変更点をチェックしてみました。

オフィシャルに発表されている変更点については、
そちらにお任せして、

ここでは、XE6 ---> XE7 のコンバートに関して実際におこなったことについて

1. TEdit の OnClick が 反応しなくなった!
これは、OnEnterで回避しましたが、突然イベントが発生しなくなったので、
あわてました。

2. MessageDlg が 「このプラットフォームでは、ブロッキング メッセージをサポートしません」。
えっ! エラーダイアログが表示できなくなってしまいました。なぜ?
ってことで、とりあえず今回は、 ShowMessageで回避。
「OK」ボタンだけだったらいいけど、そのほかはどうしようか。。あとでかんがえよう。

3. プロジェクトはそのままだとターゲットが追加できなかったりする。
ターゲットにWindows64ビットがくわわったのはいいけれど、
そのままのプロジェクトだとダメそうなので、プロジェクトを新規に作成して、
それぞれのpas と fmx をプロジェクトのフォルダーにコピーして追加で、
無事復活。


とりあえず、以上細かい話ですが、納期が迫っているプロジェクトがあるので、
ちょいとあせりました。


ただいま、クロスプラットフォーム開発のダークホース 
Delphi XE6 をお試し中ですが、ここで一度、中間報告!
というか感想。

TScaledLayout をTForm に貼り付けて、あとのコンポーネントをTScaledLayoutに配置すれば、
どんな解像度のAndroid、iOSでも自動で拡縮してくれるのは、とても便利。
また、Windows Formライクな画面作成なので、これまた楽ちん。

Android のアプリを Eclipse で、ぜんぜん使えない画面レイアウト機能を見捨てて、
XMLで画面をハードコーディングして、各端末の画面解像度の違いでなやまされて
というのから比べると 10倍以上速いだろう。

コンポーネントもVCLほどではないが、Firemonkey のコントロールがたくさんそろっているので、
さくさくつくれます。

ローカルのデータベースもWeb経由のREST JSONもそろってるしということで、
業務アプリには最適! とおもったのですが。。。

難点がないこともない。
問題1. 
Android といっても、NDKを使ってコンパイルしているので、ARM系CPUのみがターゲット。
最近のタブレットはIntel の ATOMを搭載しているものが多数出てきているので、かなり問題。
ただし、Embarcadero曰く、来年以降で対応を予定 (検討? )ということなので、すこしだけ安心?

問題2.
TImage というか、Bitmap 、Canvas、あたりが Win32ターゲットとAndroid、iOSで挙動がかなり違う!  これは、かなりショッキングというか致命的。業務システムであれば、あまり問題にならないが、ゲームなどを作ってみようなどとなると問題かも。

問題3. 
上記のTImageを使って画像処理プログラムを書いてみたところ、Win32 (Corei7) をターゲットにしてコンパイルしたものは処理に3秒程度だったのが、 Android (今回はASUS MeMO8) では35秒もかかってしまった。やはりまだタブレットは非力なんですね。というか、Arm系は浮動小数点の計算がおそいから仕方ないのかな?

問題4.
TEditやTMemoへの文字入力が遅い! 
性能が良いタブレットであればもう少しサクサク行きそうだが、それにしても遅い。
タブレットの性能アップ待ち。

問題5.
情報が少ない! 昔のDelphiの記憶から感で突き進むしかない。
(あとでまたDelphi 魔法のTIPS 続編 (干支が一回りしてしまった) でも書くか? )


とまぁ、問題点も散見できるが、それを差し引いてもなかなか魅力的なクロスプラットフォーム開発であることは間違いない。Delphiが昔のような輝きをとりもどせるかどうかは、XE7 、 XE8 にかかっていますね。

ところで、最近のDelphi のユーザー数ってどうなんでしょ?
世界の開発者数と日本の開発者数のザックリとした人数が知りたい。
XE5 のときの発表では、 日本とアメリカで 100%を超える増加を記録とありますが、
それがかえって母数が少ないのではという不安にかられるわけです。



Embarcadero のAppmethod

| | コメント(0) | トラックバック(0)
私がDelphiから離れて久しいのですが、ノーマークのうちに進化を遂げていました。
というか、路線変更していました。

Embarcadero (元はBorland、CodeGearの製品) のAppmethod (RAD Studio)

なんと私が探し求めていたクロスプラットフォーム開発の要件をほぼ満たしているようです。
ゲーム系はUnity で、スピードが必要なければHTML5、
業務アプリは? ・・・ というのがこの数年の悩みであったわけです。

今、実際の案件に適用して試しているところですが、なかなか素晴らしい。
ちょっとパワーのないAndroid端末ですと動きがとろいのですが、
ネイティブにコンパイルされるのでいい感じです。

で、実はネイティブってところにずっと引っかかっていて、
Android 用のビルドにNDKを使っているため、Intel Atomチップの場合は動作しないかも??
というのがきになって仕方ありませんでした。

気になったので、似て非なるタブレットを2台テストで購入
両方とも、ASUS の 「MeMO Pad8」 
でも・・・
旧版は、ME180A  (CPUがArm系のチップ)
新版は、ME181C  (CPUがIntel のAtom TZ3745 x86系)
ということで、別物。

最近の7~8インチのAndroidタブレットで Atomを採用している機種が
実は結構あります。

で、試した結果ですが、
Atomでは、動きませんでした。。残念!!

でもあきらめるのはまだ早い!
ってことで、NDKについてちょっと確認したところ、
今、AppMethodにセットしているNDKのバージョンは9d。
そんでもって、NDKのダウンロードページにある最新版は、10。
リリースノートには、

Added 3 new ABIs, all 64-bit: arm64-v8a, x86_64, mips64.

なんと! x86の文字が。
できるかもしれない。
でも今のプロジェクト時間がないので後で調査だね。

誰か試してブログにアップしてくださいまし。

それと、ちょっと話はそれるが。。
この製品のネーミングなんとかならないのでしょうか?
名前のセンスとかではなくて、製品群がわかりにくい!!
これだから浸透しないんだよね。と思う。

RAD Studio はDelphi と C++ 両方可能なスイートの名前で、
それとは別にDelphi 、 C++ があったり、Rad Studioの中ではDelphi
という呼び名をやめて、Object Pascal になっていて、
さらにRAD Studio からモバイル向けだけを抽出して再構築したものを
AppMethod という名前にしたりで、知らないととても同じ製品群であると
わからないよね。

だいたい、出版社からすると、本のタイトルにこまります。
ターゲットは上記製品のすべてなのに、製品名がバラバラなので、
タイトルにこまってしまいます。

ちなみに、以前弊社で出版した
「Delphi 魔法のTips」 (好評でした。)
を今回の製品用に出版するとしたら。。。
なんてタイトルがいいのかわかりません。

とりあえずこんな感じか?
「夢のクロスプラットフォーム開発
AppMethod 魔法のTips (Object Pascal版) 
 RAD Studio XE6、Delphi XE6対応
iOS、Android、Win、Macがワンソースで開発できる!」

長すぎて意味がわかりません。

この記事も長すぎて、何がいいたのかわからなくなってきましたね。

最後に、今のところのAppMethod の気になるところ
というか次のバージョンでは対応してほしいこと。

・コードエディタのロールバック
 カーソルの移動までログとっているので、ロールバックがわずらわしい。
・デザインエディタのロールバック
 ロールバック機能なし。誤ってコントロールがずれた場合、元の位置がどこだっけ? 
 となやむことになる。
・スタイルデザイナ
 モバイル版は、スタイルのコピー、追加がツリー上でできない。
 ツリー上でctrl を押しながらドラッグすると+記号が表示されるくせに、
 ただの移動になってしまう。
 仕方ないので、スタイルをファイルに出力してテキストエディタで直接編集
 これはうまくいったので、面倒であるがこれしかない。
・画面エディタで表示パーセントを変えられない。
 最近のスマホ、タブレットは高解像度が多いので、その解像度で設計を
 しようとすると、一画面に表示できないので、画面設計に苦労する。

すべて開発環境に対する要望でありますが、結構重要なので。。
よろしくお願いします。 David I 様。
極めて個人的な話で恐縮ですが、
レーシック手術を行いました。

年々、メガネをかけての作業がつらくなってきたのと、
眼精疲労による頭痛、肩こりが激しくなってきたため、
昨年12月に思い切って、レーシックを行いました。

実は、私の弟夫婦が3年ほど前にレーシックをやったのですが、
術後も良好だったため、特に心配はありませんでした。

手術は1日で、午前中は詳細な検査とデータをとり、午後に手術という流れでした。
手術は両目でほんの数分。
目が閉じないように固定して、何種類かの目薬、麻酔がほどこされ、
フラップという蓋の作成が20秒弱、レーザー治療に至っては3秒程度でした。
同じことを両目に対して行うだけです。

術後、初日は電車で家に帰るまで、10分毎に痛み止めなどの点眼を行いながら、
帰りましたが、翌日は痛みもなく、1.5~2.0の視力に回復しました。
すごいですね。

最初のうちは、夜の光が拡散して、かなりファンタジーな感じだったり、
朝日が異常にまぶしかったりというのがありましたが、
1ヶ月もする頃には慣れてしまって、何も違和感はないです。

ゴルフも快適ですね。

感想は、やってよかったです。
年明けから、弊社ではプロジェクトの立ち上げラッシュに追われています。
iOS、Android、Windows8、WPF、Windows Phone とバラバラですが、
やはり、最近は、iOS、Android、Windows8 のお話が多くなっております。

一方で、弊社の東京事業所のほうでは、常駐案件の話も動きが活発になってきています。
どうも市場では、Javaの技術者不足のようで、値段が高騰しております。

どうであれ、景気が良いことはいいのですが、
弊社が身を置くIT業界、親会社の自動車部品メーカーの海外へのシフトが加速しています。

弊社もだいぶ前から、中国の青島でオフショア開発をやっていますが、
今回の海外シフトは、生産拠点を海外に求めるというよりは、
海外市場を掴みに行く動きが顕著になってきているということです。

今年は、弊社も海外市場を求めた動きを加速させていくつもりです。
あらゆる意味で勝負の年になることは間違いないですね。

弊社の強みをさらに伸ばせるようにがんばっていきます!

2016年4月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

アーカイブ

ウェブページ