掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
memoの行数を知る方法を教えてください。 (ID:49031)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
そうですよね、ただもっと言えば、 TMemoコンポーネントが生成された時は表示されないのか?とか、 TMemoコンポーネントのサイズが変更された時も表示が更新されないのか?とか、 色々有ります。 下記コードはその対策を施したコードです。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class( TForm ) Memo1: TMemo; procedure FormCreate( Sender : TObject ); private { Private 宣言 } MemoProc : TWndMethod; procedure OnMemoScroll( var Msg : TMessage ); procedure DrawScrollInfo; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate( Sender : TObject ); begin // MemoProc := Memo1.WindowProc; Memo1.WindowProc := OnMemoScroll; end; procedure TForm1.OnMemoScroll( var Msg : TMessage ); begin MemoProc( Msg ); case Msg.Msg of WM_CREATE : DrawScrollInfo; WM_SIZE : DrawScrollInfo; CN_COMMAND : if Msg.WParamHi = EN_VSCROLL then DrawScrollInfo; WM_VSCROLL : DrawScrollInfo; end; end; procedure TForm1.DrawScrollInfo; var ScrollInfo : TScrollInfo; begin // TMemoのスクロール情報取得 FillChar( ScrollInfo, SizeOF( ScrollInfo ), 0 ); ScrollInfo.cbSize := SizeOf( ScrollInfo ); ScrollInfo.fMask := SIF_RANGE or SIF_PAGE or SIF_POS; if GetScrollInfo( Memo1.Handle, SB_VERT, ScrollInfo ) then begin // TMemoコンポーネントでの見た目の行数(行番号)を表示 Caption := '行数 = ' + IntToStr( ScrollInfo.nPage ) + ' / ' + '行番号 = ' + IntToStr( ScrollInfo.nPos ) + '〜' + IntToStr( ScrollInfo.nPos + ScrollInfo.nPage - 1 ); end; end; end. AS様のご指摘の様に、スクロールバーのつまみを動かしても表示が更新されない!というのは事前にわかっていました。 > 見える範囲を喋らせるプログラムを組んでいます。 という事を仰られていたので、ボタンか何かのトリガで「見た目」の行数や行番号が判れば良いのかと思って投稿していました。 Windowsでは、様々な入力方法があるので、それに対応するにはどうすれば良いのか?を記述してあげないといけません。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.