エディタのライン表示するには?

解決


カレーライズ  2006-06-07 08:52:26  No: 22086

いつもお世話になります。
  今TMemoを利用してファイルを読み表示させています。編集させないようにReadOnlyで読み取り専用にしています。
  そこで内容を表示させている間、現在カーソルのある行にラインを引きたいのですが、調べていくとDrawすればいいみたいなことがわかったのですがいざ  実際TMemoにはDrawイベントがないのでは・・・??と思いどうすればいいのかがわかりませんでした。もしかして  TMemoではできないのでしょうか??  どなたかご教授お願いしたいと思います。


えーと  2006-06-07 09:45:06  No: 22087

できないことはないでしょうけど、非常に面倒だし、きたなくなる。
TRichEdit なら簡単ですが、そもそも、そのような用途なら、別のエディタコンポ
を使うべきです。


キモ  2006-06-07 10:01:46  No: 22088

未経験領域でしたが・・。

h ttp://www.geocities.co.jp/SiliconValley-Bay/1352/fbfilemdi/v150/FrameMasiMemoUnit.txt

TShape がキモ・・な感じ。


V.Up版  2006-06-07 10:21:51  No: 22089

V.Up版があった。

h ttp://www.geocities.co.jp/SiliconValley-Bay/1352/masimemo/FrameMasiMemoUnit.txt


ちらつき防止隊員  2006-06-08 03:17:04  No: 22090

エディタに関する情報はこの掲示板にけっこうありますね


ちらつき防止隊員  2006-06-08 03:20:33  No: 22091

SynEditやらTeditorやら紹介されています。
SynEditはフリーです。でもルーラーはどうやって表示するんだろ?


カレーライズ  2006-06-09 06:50:32  No: 22092

ありがとうございます。
>TRichEdit なら簡単ですが
通常  エディタを作成する場合は TRichEditと行うのでしょうか??そのような場合はどのようにしていけばいいのでしょうかね・・・?

>TShape がキモ・・な感じ。
たしかにそうですね。まさかラインにTShapeとは考えもつかなかったです。

それにしてもエディタは奥深いですね


テスト  2006-06-09 15:06:02  No: 22093

提示されてたページを参考に、ごく簡単に組んでみました。
なんか反応鈍いです。
それと、文字高はどうしたら得られるのか?  がわからんまま。まぁ、なんとかなるでしょう。

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Shape1: TShape;
    procedure Memo1Enter(Sender: TObject);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private 宣言 }
procedure kasen;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.kasen;
begin
    Shape1.Top := 12 * (Memo1.Perform(em_LineFromChar, $FFFF, 0)+1);
    Shape1.Invalidate;
end;

procedure TForm1.Memo1Enter(Sender: TObject);begin  kasen;  end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);begin  kasen;  end;

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);begin  kasen;  end;

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin  kasen;  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with Shape1 do
  begin
    Parent := Memo1;
    Height := 1;
    Left := 0;
    Pen.Width := 1;
    Pen.Color := clRed;
  end;
end;

end.


実験  2006-06-09 15:43:47  No: 22094

実験の結果、TShape でなくても、Label でも Panel でもいけるみたいです。


横幅  2006-06-09 15:53:14  No: 22095

Pen.Width := Memo1.Width;
が「らしい」かも。


メモメモ  2006-06-09 18:11:36  No: 22096

http://support.borland.com/entry.jspa?externalID=4351
メモコンポーネントとメッセージ


カレーライズ  2006-06-10 08:24:41  No: 22097

みなさん。ありがとうございます。
  サンプル例やいろんなサイトを教えて頂きまして非常に役にたちました。とりあえずいろんなご意見をもとに  がんばって作成していきたいと思います。ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加