お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"TMemoのキャレット位置を表示"








◆解説
  TMemoのキャレット位置をステータスバーに表示する例です。

  同様の処理としては、EM_LINEFROMCHAR, EM_LINEINDEXメッセージを
  使う方法が一般的ですが、以下の例は、Delphiのコードエディタと同
  様に範囲指定中でもキャレット位置を表示し続けます。

◆動作確認
  Delphi3.1 + Win95a

◆例
  Form1に Memo1と StatusBar1を置いて下さい。
  #StatusBar1の右クリック「パネルの設定」で、TStatusPanelを 1個
  #追加して、StatusBar1.Panels[0]が使えるようにしておきます。

----- ここから -----
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ...省略
  private
    { Private 宣言 }
    procedure MyIdle(Sender: TObject; var Done: Boolean);
  ...省略

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := MyIdle;
end;

procedure TForm1.MyIdle(Sender: TObject; var Done: Boolean);
var
  saveFont: TFont;
  pt: TPoint;
  rt: TRect;
  sz: TSize;
  lno, cno: Integer;
begin
  if Memo1.Focused then begin
    saveFont := TFont.Create;
    saveFont.Assign(Font);  //Form1.Fontを待避
    try
      Font := Memo1.Font;
      GetCaretPos(pt);
      Memo1.Perform(EM_GETRECT, 0, Longint(@rt));
      lno := Memo1.Perform(EM_GETFIRSTVISIBLELINE, 0, 0)
           + ((pt.y - rt.Top) div Canvas.TextHeight('W'));
      cno := GetScrollPos(Memo1.Handle, SB_HORZ);
      GetTextExtentExPoint(Canvas.Handle,
                           PChar(Memo1.Lines[lno]),
                           Length(Memo1.Lines[lno]),
                           pt.x - rt.Left + cno,
                           cno,
                           PInteger(nil)^,
                           sz);
      StatusBar1.Panels[0].Text := Format('%4d:%4d', [lno+1, cno+1]);
    finally
      Font := saveFont;     //Form1.Fontをもとに戻す
      saveFont.Free;
    end;
  end;
end;
----- ここまで -----

  GetTextExtentExPointの使い方はこれでいいのかなぁ...(^-^;

  怪しい点がありましたら、nifty:FDELPHI/MES/11 あたりで突っ込み
  入れて下さい。m(_`_)m
                                 98/04/03(金) 22:33 Satobe(JCG00336)

Original document by Satobe          氏 ID:(JCG00336)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum