Memoに入力したテキストの高さが異なる事について


初心者  2013-10-25 03:45:05  No: 45453  IP: [192.*.*.*]

こんにちは。
勉強していてたまたま疑問に感じたので質問させていただきます。
DelphiXE4です。
Form に Memo を一つ貼り付け、入力したテキストの高さを取得しようとしています。
以下のようにコーディングしました。

private
  i       : Integer;
  phcount : array[0..100] of Single // 垂直方向のピクセル数

(・・・)


procedure TForm1.FormCreate(Sender: TObject);
begin
  i := 0;
  Memo1.Canvas.Font.size := 20;
  Memo1.Canvas.Font.Family := 'Segoe UI';
  Memo1.Canvas.Font.Style := [];
  //(Memo1のFontと同じ設定)
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  phcount[i] := Memo1.Canvas.TextHeight(Memo1.Text);
  Inc(i);
end;


これで 
・Memo1 に a を入力して改行
を繰り返しました。

等差な値が入るかと思ったのですが、結果は、
phcount[0] = 28;
phcount[1] = 55;
phcount[2] = 81;
phcount[3] = 108;
phcount[4] = 134;
phcount[5] = 161;
となりました。
これは、一行目の a は28ピクセル、2行目 a は27ピクセル、3行目の a は26ピクセル必要という事だと思いますが、どうして同じ a なのにピクセル数に差が出るのでしょうか?

編集    削除
tor  2013-10-25 04:49:12  No: 45454  IP: [192.*.*.*]



確認ですがテョニの設定をテイベントでやるのではなく、ヤネを使う直前にやっても結果は同じですか?

(ヤテのテは一時的な「借り物」で、イベント処理が終わると返却されるものなので
基本的には、毎回イベントの中で実際に使う直前に設定し直さないと駄目です)
スススススススススススススススススススススススススススススススススススススススス
ニコ 嶄忽繁
トコ イーアウッアーッイエィ木ゥ イアコーイコアア シ  スュアセシ上級者セ シッニセシノヘヌ ス「コッッョョョッッウョ「 ス「ー「セ 書込者ノミ:ロイアケョアウクョイオオョイカン


<この発言は管理人により削除されました。>

スススススススススススススススススススススススススススススススススススススススス
ニコ 初心者
トコ イーアウッアーッイエィ木ゥ イアコアウコオエ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「ィ。 、 ン

ヲサ様、返信ありがとうございます。

アドバイス頂いた手順で試してみましたが結果は同じでした・・・。

修正コード  :
ヲサヤニアョニティモコヲサヤマゥサ

ヲサヲサヲサコスヲサーサ


ヲサヤニアョヘアティモコヲサヤマゥサ

ヲサヲサヘアョテョニョヲサコスヲサイーサ
ヲサヲサヘアョテョニョニヲサコスヲサァモヲサユノァサ
ヲサヲサヘアョテョニョモヲサコスヲサロンサ
ヲサヲサロンヲサコスヲサヘアョテョヤネィヘアョヤゥサ
ヲサヲサノィゥサ


結果  :
ヲサスヲサィイクャヲサオオャヲサクアャヲサアークャヲサアウエャヲサアカアャヲサアククャヲサイアエャヲサイエアャヲサイカキャヲサイケエャヲサウイアャヲサウエキャヲサウキエャヲサエーーャヲサエイキャョョョゥ

私は「ニヘヲサデスクトップアプリケーション」のヲサラヲサウイャヲサカエヲサでこの現象を確認し質問させて頂いたのですが、先ほどヲサヘヲサマモリヲサで同じソースコードで試したところ、

結果  :  
ヲサスヲサィイウョイアクキオャヲサエカョイアクキオャヲサカケョイアクキオャヲサケイョイアクキオャヲサアアオョイアクキオャヲサアウクョイアクキオャヲサアカアョイアクキオャヲサョョョゥ

となり、各行のピクセル数がヲサイウヲサで等しくなりました。
一般的にラヲサとヲサヘヲサで解像度が異なるらしいのですが(ラヲサコヲサケカャヲサヘヲサコヲサキイ)、それと何か関係があるでしょうか?
それにしても、各行でピクセル数が変わってしまうのは良く分かりません・・・。

自分でもまだ考えてみますので、何かお気づきの点がありましたらお願いいたします。
スススススススススススススススススススススススススススススススススススススススス
ニコ 初心者
トコ イーアウッアーッイエィ木ゥ イアコイアコオオ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「ィ。 、 ン

すみません、まだ解決していません。
ヲサ様宛の返信を書いていたら、いつの間にか解決に・・・。

嶄忽繁ヲサ様、メールの内容をまだ読んでいないのですが、勝手に解決ボタンは押さないでください・・・。

解決の解除方法が分からりませんが、まだまだ解決していません。
皆様よろしくお願いいたします。
スススススススススススススススススススススススススススススススススススススススス
ニコ 
トコ イーアウッアーッイエィ木ゥ イアコウーコオク  書込者ノト:ロ 」 ァ」ハノ


 ン

ふむむ、ちなみにニョネはそのイキというのに近い値なのですか?
もし全然違うようだったら、そのウ行だと同じフォントが選択されていないと思うので念のため
ヘアョテョニヲサコスヲサヘアョニサ
のように同一フォントを割り当てて試してみてください。
スススススススススススススススススススススススススススススススススススススススス
ニコ 初心者
トコ イーアウッアーッイエィ木ゥ イアコエケコエウ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「ィ。 、 ン

ヲサ様、返信ありがとうございます。

確認してみましたが、残念ながら「読取り専用プロパティに書き込む事はできません」というエラーが出てしまいました。
一応デバッグで止めながらヲサニヲサを確認しましたが、ヘアョテョニャヲサヘアョニヲサ共にァモヲサユノァヲサでした。

修正コード  :  
ヲサヤニアョヘアティモコヲサヤマゥサ

ヲサヲサヘアョテョニョヲサコスヲサイーサ
ヲサヲサヘアョテョニヲサコスヲサヘアョニサヲサッッヲサ修正
ヲサヲサヘアョテョニョモヲサコスヲサロンサ
ヲサヲサロンヲサコスヲサヘアョテョヤネィヘアョヤゥサ
ヲサヲサノィゥサ


ちなみに、ニョネヲサというプロパティは存在しませんでした。
よろしくお願いいたします。
スススススススススススススススススススススススススススススススススススススススス
ニコ 初心者
トコ イーアウッアーッイオィ金ゥ ーキコエーコイエ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「ィ。 、 ン

ヘアョテョニョモヲサヲサヲサコスヲサヘアョニョモサ
ヘアョテョニョニヲサヲサコスヲサヘアョニョニサ
ヘアョテョニョモヲサヲサヲサヲサコスヲサヘアョニョモサ

に修正しても結果は同じでした。
スススススススススススススススススススススススススススススススススススススススス
ニコ 初心者
トコ イーアウッアーッイオィ金ゥ ークコアーコオカ シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「ィ。 、 ン

以下を追加して同じ作業をすると綺麗にヲサヲサの下に線が引き続けたので、ヲサはイキピクセルなのではないでしょうか?イキ以外だとヲサヲサと途中で重なってしまったりしてしまいます。

追加分コード  :

ヲサヲサヲサコヲサノサ

ヲサヤニアョニティモコヲサヤマゥサ

ヲサヲサヲサコスヲサーサ


ヲサヤニアョヘアティモコヲサヤマゥサ

ヲサヲサノィゥサ
ヲサヲサモフィャヲサゥサ
ヲサヲサロヲサュヲサアンヲサヲサヲサヲサヲサヲサヲサヲサヲサヲサコスヲサヤフョティモゥサ
ヲサヲサロヲサュヲサアンョミヲサヲサヲサコスヲサニアサ
ヲサヲサロヲサュヲサアンョチヲサヲサヲサヲサコスヲサヤチフョネサ
ヲサヲサロヲサュヲサアンョフヤヲサコスヲサヤフヤョヤサ
ヲサヲサロヲサュヲサアンョミョルヲサコスヲサイキヲサェヲササ
ナサ

イカヲサ〜ヲサイクヲサの範囲で取得してしまうのは、ヤネヲサで高さを正確に取得できていないのか、それともこういう仕様なのか、私の環境が変なのか・・・。

編集    削除