<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE feed [
      <!ENTITY lt "&#38;#60;">
      <!ENTITY gt "&#62;">
      <!ENTITY amp "&#38;#38;">
      <!ENTITY apos "&#39;">
      <!ENTITY quot "&#34;">
      <!ENTITY nbsp "&#160;">
      <!ENTITY copy "&#169;">
]>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">開発ブログ</title>
    <subtitle type="text">MASA Lab softlab-Software Architecture Laboratory</subtitle>
    <updated>2026-05-21T13:33:09+09:00</updated>
    <id>http://softlab.masa-lab.net/modules/d3blog/index.php</id>
    <link rel="alternate" type="text/xhtml" hreflang="ja" href="http://softlab.masa-lab.net/" />
    <link rel="self" type="application/atom+xml" href="http://softlab.masa-lab.net/modules/d3blog/index.php?page=atom" />
    <rights>Copyright &copy; 2008-2019 by MASA-Lab</rights>
    <generator uri="http://softlab.masa-lab.net/">D3BLOG - XOOPS BLOG MODULE</generator>
    <entry>
        <title>Frame には要注意</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=265" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=265</id>
        <published>2017-05-29T22:10:00+09:00</published>
        <updated>2018-02-16T15:25:59+09:00</updated>
        <category term="VCL" label="VCL" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">VCL XE7LiveBindings で CustomFormat を設定しても一向に反映されないいや、デザインモードでは見えるのだが実行してみると反映されていないLiveBindings のバグなのかと思って、色々と試してみた...</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>VCL XE7<br /><br />LiveBindings で CustomFormat を設定しても<br />一向に反映されない<br />いや、デザインモードでは見えるのだが<br />実行してみると反映されていない<br /><br />LiveBindings のバグなのかと思って、色々と試してみた<br />全然わからない<br /><br />結局、フレームのせいだった<br />フレームで、grid と PrototypeBindSource を設定して<br />そのフレームをフォームに張り付けていたのだが<br />どうもメインのフォームに張り付けたフレームで<br />IfThen などのCustomFormat が削除されてしまうのだ<br />何度やってもダメ<br />Bind 関係の uses が足りないせいか？と思って<br />色々追加するが結局ムダ<br /><br />張り付けて一回目のコンパイルはOKなのに<br />その後、すでにデザインモードで動作しなくなっている！！<br />そして再度コンパイルすると当然ダメ！<br />これひどい</div>]]>
       </content>
    </entry>
    <entry>
        <title>ダイアログフォームに裏に行ってほしくない！</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=161" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=161</id>
        <published>2015-02-20T22:10:00+09:00</published>
        <updated>2015-02-23T12:27:27+09:00</updated>
        <category term="VCL" label="VCL" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">Delphi VCL はフォームやダイアログを独自のフォームによって処理しているので一般的な Windows プログラムと違う動きをする部分が結構あります。フォームを ShowModal でダイアログとして表...</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>Delphi VCL はフォームやダイアログを独自のフォームによって処理しているので<br />一般的な Windows プログラムと違う動きをする部分が結構あります。<br /><br />フォームを ShowModal でダイアログとして表示しているのに、<br />タスクバーのアイコンをクリックすると、ダイアログがオーナーフォームの裏に隠れてしまうことがあります。<br />これを防ぐには以下のようなコードを入れればよいようです。<br /><br /><pre class="blogCode"><code>
procedure TDialog1.FormCreate(Sender: TObject);
begin
  if (Owner &lt;&gt; nil) and (Owner is TForm) {and (fsModal in FormState)} then
    SetWindowLong(Handle, GWL_HWNDPARENT, TForm(Owner).Handle);
end;
</code></pre><br /><br />参考にしたサイトには {} 内のコードが入っているのですが、私が試したやり方では {}内があるとうまくいきませんでした。<br />基本的にダイアログとして使うフォームをモーダルにしたりモーダルでなくしたりということはしないので、これでも大丈夫かな...と<br /><br />[参考サイト]<br /><a href="http://www.blackcat.xyz/article.php/ProgramingFAQ_del0069" target="_blank">[Delphi] フォームの管理を多少楽にする</a>(くろねこ研究所)</div>]]>
       </content>
    </entry>
    <entry>
        <title>GridPanel のパーセント設定を簡単にする方法</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=155" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=155</id>
        <published>2015-02-14T21:16:14+09:00</published>
        <updated>2015-02-23T12:30:28+09:00</updated>
        <category term="VCL" label="VCL" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">使いそうで以外に使わない VCL の GridPanelはじめて使ってみました。カラムや行を増やすには、ColumnCollectionプロパティや RowCollection で追加をすればいいのはわかったのですが、サイズを割...</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div>使いそうで以外に使わない VCL の GridPanel<br />はじめて使ってみました。<br /><br />カラムや行を増やすには、ColumnCollectionプロパティや RowCollection で追加をすればいいのはわかったのですが、サイズを割合で指定しようとしてちょっとはまりました。<br />Embarcadero Developer Network の<a href="http://edn.embarcadero.com/jp/article/33622" target="_blank">Delphiでフローレイアウト</a>の記事にも書いてありますが、パーセント表示の値を変更しても、思った値になってくれないのです。<br />記事を読んで理由は納得しましたが、ちょっと困りました。<br />同記事には実行時のコードでパーセント設定する方法が書かれていますが、これは面倒ですよね...<br />こういう時は、画面をエディタで表示して直すのが一番でしょう。<br />デザインビューのフォーム上で右クリックをして「エディタで表示(V)」を選択すると、フォームがテキストによる記述に変わります。<br />GridPanelの設定の中に ColumnCollection の記述を見つけます。<br /><pre class="blogCode"><code>
    ColumnCollection = &lt;
      item
        Value = 37.500000000000000000
      end
      item
        Value = 62.500000000000000000
      end
</code></pre><br />こんな感じで記述されていますから、Valueの部分を好きなように編集して Alt+F12 でデザインビューに戻せば出来上がりです。<br /><br />こんな風に、フォームのテキスト表示は便利ですが、一歩間違えると画面デザインを壊してしまうので注意が必要です。<br /><br />Delphi XE5</div>]]>
       </content>
    </entry>
    <entry>
        <title>ダイアログ表示中にメインフォームのキーボードショートカットが有効になってしまう</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=151" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=151</id>
        <published>2015-01-21T22:40:00+09:00</published>
        <updated>2015-06-19T11:55:36+09:00</updated>
        <category term="VCL" label="VCL" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">
Delphi VCL
メインフォームの TActionList にキーボードショートカットを設定しているときにダイアログを表示すると、
ダイアログ処理中でもメインフォームのショートカットキーが有効に...</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div><p>
Delphi VCL<br />
メインフォームの TActionList にキーボードショートカットを設定しているときにダイアログを表示すると、
ダイアログ処理中でもメインフォームのショートカットキーが有効になっています。<br />
これを回避するためには、ダイアログ表示前にメインフォームの Enabled を False にすればOKです。<br />
</p>
<pre class="blogCode"><code>
d := TDialogForm.Create(Self);
try
  Self.Enabled := False;
  d.ShowModal;
finally
  Self.Enabled := True;
  d.Free;
end;
</code></pre>
<p>
とはいえ、たくさんダイアログがあってダイアログ表示前に Enabled を False にするのが面倒くさいということもあるかもしれません。<br />
そんな時はメインフォームに以下のような記述を追加すると、回避できます。
</p>

<p>
interface の宣言部
</p>
<pre class="blogCode"><code>
type
  TMainForm = class(TForm)
    ...
  public
    function IsShortCut(var Message: TWMKey): Boolean; override;
</code></pre>

<p>
implementation 実装部
</p>
<pre class="blogCode"><code>
function TMainForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if not Self.Active then Exit(False);
  Result := inherited;
end;
</code></pre>


<p>
ショートカットキーの処理は、アクティブなフォームの IsShortCut で処理されるようで、処理をしたら True を返せば良いみたいです。<br />
False にするとMainForm に遡って処理が行われるようです。<br />
(MainForm が Enable の場合)<br />
このため、メインフォームでキーボードショートカットが実行されてしまうんですね。
</p></div>]]>
       </content>
    </entry>
    <entry>
        <title>TImage.Picture で png 画像</title>
        <link rel="alternate" type="text/xhtml" href="http://softlab.masa-lab.net/modules/d3blog/details.php?bid=46" />
        <id>http://softlab.masa-lab.net/modules/d3blog/details.php?bid=46</id>
        <published>2014-01-16T22:10:00+09:00</published>
        <updated>2015-03-05T19:56:15+09:00</updated>
        <category term="VCL" label="VCL" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="http://softlab.masa-lab.net/" xml:lang="ja">
よく忘れるので自分のために書いておきます。

TImage.Picture.LoadFromFile で PNG 画像を読み込みたいときには
Vcl.Imaging.PngImage
を uses します。
</summary>
       <content type="html" xml:lang="ja" xml:base="http://softlab.masa-lab.net/">
<![CDATA[<div><p>
よく忘れるので自分のために書いておきます。<br />
<br />
TImage.Picture.LoadFromFile で PNG 画像を読み込みたいときには<br />
Vcl.Imaging.PngImage<br />
を uses します。<br />
</p>
<p>
これは Vcl.Imaging.PngImage の Initialization で、以下のように処理されているからです。<br />
</p>
<pre class="blogCode"><code>
    TPicture.RegisterFileFormat(&#039;PNG&#039;, &#039;Portable Network Graphics&#039;, TPngImage);
</code></pre>
<p>
つまり、新たな拡張子の画像をサポートしたい場合に、
この機構を使えるということ。<br />
</p>

<p>
ちなみに、ほかに<br />
Vcl.Imaging.jpeg, Vcl.Imaging.GIFImg などがあります。
</p></div>]]>
       </content>
    </entry>
</feed>