いつもお世話になります。
今TMemoを利用してファイルを読み表示させています。編集させないようにReadOnlyで読み取り専用にしています。
そこで内容を表示させている間、現在カーソルのある行にラインを引きたいのですが、調べていくとDrawすればいいみたいなことがわかったのですがいざ 実際TMemoにはDrawイベントがないのでは・・・??と思いどうすればいいのかがわかりませんでした。もしかして TMemoではできないのでしょうか?? どなたかご教授お願いしたいと思います。
できないことはないでしょうけど、非常に面倒だし、きたなくなる。
TRichEdit なら簡単ですが、そもそも、そのような用途なら、別のエディタコンポ
を使うべきです。
未経験領域でしたが・・。
h ttp://www.geocities.co.jp/SiliconValley-Bay/1352/fbfilemdi/v150/FrameMasiMemoUnit.txt
TShape がキモ・・な感じ。
V.Up版があった。
h ttp://www.geocities.co.jp/SiliconValley-Bay/1352/masimemo/FrameMasiMemoUnit.txt
エディタに関する情報はこの掲示板にけっこうありますね
SynEditやらTeditorやら紹介されています。
SynEditはフリーです。でもルーラーはどうやって表示するんだろ?
ありがとうございます。
>TRichEdit なら簡単ですが
通常 エディタを作成する場合は TRichEditと行うのでしょうか??そのような場合はどのようにしていけばいいのでしょうかね・・・?
>TShape がキモ・・な感じ。
たしかにそうですね。まさかラインにTShapeとは考えもつかなかったです。
それにしてもエディタは奥深いですね
提示されてたページを参考に、ごく簡単に組んでみました。
なんか反応鈍いです。
それと、文字高はどうしたら得られるのか? がわからんまま。まぁ、なんとかなるでしょう。
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.
実験の結果、TShape でなくても、Label でも Panel でもいけるみたいです。
Pen.Width := Memo1.Width;
が「らしい」かも。
http://support.borland.com/entry.jspa?externalID=4351
メモコンポーネントとメッセージ
みなさん。ありがとうございます。
サンプル例やいろんなサイトを教えて頂きまして非常に役にたちました。とりあえずいろんなご意見をもとに がんばって作成していきたいと思います。ありがとうございました
ツイート | ![]() |