~katsuhiko メッセージボード

back 2801-2850

2851-2900

2901-2950


2900 Re: PrevSpaceIndentのバグ コメント数:  2件
  本田勝彦 2004/02/24 (火) 00:32
AutoIndent で挿入されるのは、ヘルプの記述にもあるように、
半角空白 #$20 です。

仕様ぢゃ。




2899 Re^2: Peggyライク コメント数:  5件
  本田勝彦 2004/02/24 (火) 00:31
while Parser.NextToken <> toEof do

のループで取得されたトークンを全部描画してください。
付属サンプルの OnDrawLine イベントハンドラに色々あります。



2898 Re^3: 行間の塗りつぶし コメント数:  0件
  本田勝彦 2004/02/24 (火) 00:29
提示されたコードで、ウチでは、マージン部分が緑に塗りつぶされました。

トークンの背景色部分をマージン間も繋げたいということだったんですね。
Macci さんのご質問にも通じますが、OnDrawLine で、1行文字列を
パースしながら取得されるトークンを描画して下さい。

サンプルのソースコードを一度全部読むのぢゃ。



2897 PrevSpaceIndentのバグ コメント数:  3件
  赤尾鉄平  | tetupei@hiroishi.org 2004/02/23 (月) 22:54
連書きスミマセン。
別件です
AutoIndent:=True
PrevSpaceIndent:=False
の時の意図する動作は
「全角スペース、全角スペース、半角スペース、文字」
で改行した際
「全角スペース、全角スペース、半角スペース」ですよね?
PrevSpaceIndent:=Falseで改行しても全て半角で埋められてしまいます。
確認バージョン:TEditor version 2.45
その後の最新版のHISTORY.TXTを見る限りでは修正したという記述は見つかりませんでした。




2896 Re: Peggyライク コメント数:  6件
  Macci 2004/02/23 (月) 15:24
ためしてみたソースサンプルです。

procedure TForm1.Editor1DrawLine(Sender: TObject; LineStr: String; X, Y,
Index: Integer; ARect: TRect; Selected: Boolean);
var
Parser:TFountainParser;
FountainColor:TFountainColor;
begin
Parser := Editor1.ActiveFountain.CreateParser;
Parser.NewData(LineStr,Editor1.ListData[Index]);
while Parser.NextToken <> toEof do
begin
FountainColor := Parser.TokenToFountainColor;
if FountainColor <> nil then
begin
Editor1.Canvas.Font.Style := FountainColor.Style;
Editor1.Canvas.Font.Color := FountainColor.Color;
Editor1.Canvas.Brush.Color:= FountainColor.BkColor;
end;

Editor1.DrawTextRect(ARect, X, Y, Parser.TokenString, ETO_CLIPPED);
end;
end;



2895 Peggyライク コメント数:  7件
  Macci 2004/02/23 (月) 15:23
こんにちは。

特定ブロック内の背景色を変えようとおもって実験しています。

イメージとしては
Peggy
http://www2.noritz.co.jp/anchor/ashp/peggy/colorcd.html

のように、スクリプト部分は全体に背景色がつく感じにしたいと思っています。
なおかつ、スクリプト部分はきっちりパースされ色分けされるような感じに。

OnDrawLine でやってみようといろいろ試していますがどうもうまくいきません^^;

以下はひとまず、データをパースしながら出力するのみのものを試しています。
これもデータの先頭にごみが出てうまく動きません^^;

どうやったらできるようになるか、ご教授頂けると幸いです。

(長いと言われたので次に分けます)



2894 Re^2: 行間の塗りつぶし コメント数:  1件
  K 2004/02/23 (月) 15:00
返信ありがとうございます。

やましたさんへの返信をみてやってみたのですが、うまく描画されません。
TagColorのBkColor もどうやって取得すればよいか分からないのですがこれはどうしたらよいでしょうか?

procedure TForm1.Editor1DrawLine(Sender: TObject; LineStr: String; X, Y,
Index: Integer; ARect: TRect; Selected: Boolean);
var
R: TRect;
begin
R := Rect(ARect.Left, ARect.Bottom, ARect.Right, ARect.Bottom + Editor1.Margin.Line);
if not Selected then
begin
Editor1.Canvas.Brush.Color := clGreen; // 取得方法がわからないため緑(TT
Editor1.Canvas.FillRect(R);
end;
end;
マージン分緑で塗りつぶされると思いきや塗りつぶされません。
これはなぜですかね。



2893 Re: 行間の塗りつぶし コメント数:  2件
  本田勝彦 2004/02/23 (月) 01:14
やましたさんへのコメントを参考にして下さい。




2892 Re: RightBracket プロパティに改行を入れたい コメント数:  0件
  本田勝彦 2004/02/23 (月) 01:11
> TEditor使わせていただいています。
> 自前のFontainに「キーワード」から「改行」まで文字色を変更しようと間がいえています。
> そこで真っ先に思いつくのがBracketItemに「キーワード」と「改行」を代入する方法ですが、改行コード「#10#13」を入れても駄目でした…
> なにかいい方法はありませんか?

Commenter にキーワードを入れるとか?
複数のキーワードがある場合は、そうですね。NextToken を override して
toReserve だったら改行までを一つの特別なトークンとして扱うメソッドへ
飛ばすという感じでしょうか?



2891 Re: OnKeyDownのVK_RETURNの怪 コメント数:  6件
  本田勝彦 2004/02/23 (月) 01:08
ごめんなさい。ウチでは確認出来ませんでした。メニューだけが有効になります。

ちなみに VK_RETURN は OnKeyPress で取得した方が幸せになれる場合が多いです。
また、あるキーを処理した場合は、そのキー入力を亡き者にした方が良い場合も〃

begin
if Key = #13 then
begin
// 処理
Key := #0;
end;
end;



2890 Re: nmLine コメント数:  0件
  本田勝彦 2004/02/23 (月) 01:05
> TEditorでLeftBar.ShowNumberMode を nmLine にして、
> 折り返しの設定をした後、TopRow を設定すると、正しい行番号と一致しない所に飛んでしまうのですがこれはどうしたらよいでしょう

TopRow に設定する値を Lines -> Row に変換したモノにしてください。

Editor1.TopRow := Editor1.LinesToRow(設定したい値);





2889 Re: ページ番号 コメント数:  0件
  本田勝彦 2004/02/23 (月) 01:02
> わたしはページ番号が欲しいなぁ。
> ユーザ指定の数値(1ページあたりの行数)で単純に割った数値を
> 表示すればよいので速度面の問題はないのでは。

これは、アプリで対応可能だと思いますが。Leftbar に描けということで
あれば、開発日誌のところに置いてある TDebugEditor が参考になると思います。



2888 Re: 行番号 コメント数:  0件
  本田勝彦 2004/02/23 (月) 01:00
> 編集した行番号を太字にするとか可能ですか?

これをやるためには、文字列データの保持方法から見直さなければならないため
実装の予定はありません。

すんません。



2887 Re: 予定ありますか コメント数:  4件
  本田勝彦 2004/02/23 (月) 00:59
> 最近のIDEのエディタでコードを折りたためるようになってきました。

これ、もう少しどんな具合なのか教えて頂けますでしょうか?
ただ語句単位でワードラップ出来るというものではないですよね?



2886 Re: 選択領域について コメント数:  0件
  本田勝彦 2004/02/23 (月) 00:58
> TEditorでMargin.Lineを2に設定して3行ほど選択すると行間に間ができておかしく感じるのですがこれはどうやったら隙間をなくすことができますか?
> なるべく行間は2ほど空けたいのですが。

サンプルです。動作確認済み
procedure TForm1.Editor1DrawLine(Sender: TObject; LineStr: String; X, Y,
Index: Integer; ARect: TRect; Selected: Boolean);
var
R: TRect;
begin
// Margin.Line 幅が選択領域として描画されないことに対応するため
// 指定された領域を Margin.Line 分下に拡張して
// 選択状態の場合は View.Colors.Select.BkColor で塗りつぶす
// 非選択状態の場合は View.Colors.Select.Color で塗りつぶす
R := Rect(ARect.Left, ARect.Bottom, ARect.Right, ARect.Bottom + Editor1.Margin.Line);
if Selected then
Editor1.Canvas.Brush.Color := Editor1.View.Colors.Select.BkColor
else
Editor1.Canvas.Brush.Color := Editor1.View.Colors.Select.Color;
Editor1.Canvas.FillRect(R);
end;





2885 行間の塗りつぶし コメント数:  3件
  K 2004/02/22 (日) 12:55
Margin.Line を設定して 特定の文字に背景色をつけると行間が塗りつぶされてくれませんが、これはどうすれば塗りつぶされるようにできるでしょうか?
例えば、
<html>
<body>
とやった際にタグの背景色はついているのですが、<html>と<body>の間に空白ができてしまうのです。

PaintLine,DrawTextRectなど見てRectを変形させてみたのですが、ETO_CLIPPEDで自動調節?されてしまうのか、どうも行間の色が塗りつぶせません。

お忙しいとは思いますが、ご教授いただけたら幸いです。



2884 RightBracket プロパティに改行を入れたい コメント数:  1件
  赤尾鉄平  | tetupei@hiroishi.org 2004/02/20 (金) 03:16
TEditor使わせていただいています。
自前のFontainに「キーワード」から「改行」まで文字色を変更しようと間がいえています。
そこで真っ先に思いつくのがBracketItemに「キーワード」と「改行」を代入する方法ですが、改行コード「#10#13」を入れても駄目でした…
なにかいい方法はありませんか?



2883 OnKeyDownのVK_RETURNの怪 コメント数:  7件
  よし 2004/02/19 (木) 22:55
はじめまして。最近TEditorを使用しはじめました。(まだ購入はしてませんが)

そこでちょっとしたおかしな現象がありますので、ご相談です。
新規フォームにTEditorとTMainMenuを置き、メニューを1つ・2つ適当に追加します。
TEditorのOnKeyDownに
if Key = VK_RETURN then
Editor1.Lines.Add('A');
と書きます(内容は無意味です)

これで、実行してTEditorにフォーカスが有る状態でキーボードでALT+?でメニューを操作し、どれかのメニューをEnterキーで選択するとOnKeyDownに処理が入ってきてしまいます。

これをTEditorではなくTMemoでやってみたのですが、入ってきませんでした。
どうにか回避したいのでアドバイスいただけませんか?



2882 nmLine コメント数:  1件
  MOR 2004/02/19 (木) 08:43
こんにちは。

TEditorでLeftBar.ShowNumberMode を nmLine にして、
折り返しの設定をした後、TopRow を設定すると、正しい行番号と一致しない所に飛んでしまうのですがこれはどうしたらよいでしょうか?



2881 ページ番号 コメント数:  1件
  いくぼ 2004/02/16 (月) 00:33
Spelsさん、こんにちは。
過去ログを読むと、行毎にフラグをもたせることになり、
多方面に影響があるようなことが書かれていますね。

わたしはページ番号が欲しいなぁ。
ユーザ指定の数値(1ページあたりの行数)で単純に割った数値を
表示すればよいので速度面の問題はないのでは。



2880 行番号 コメント数:  3件
  Spels 2004/02/15 (日) 15:44
編集した行番号を太字にするとか可能ですか?



2879 予定ありますか コメント数:  5件
  靖  | touchin@ak.wakwak.com 2004/02/13 (金) 01:26
 http://park8.wakwak.com/~chin/
こんばんは。靖です。

最近のIDEのエディタでコードを折りたためるようになってきました。
本田さんはどうされるおつもりですか?時代の潮流(はやり)に
乗っていきますか?
自分は、ものすごく迷ってます。あれは厄介ですからね。
でもやらないと時代に取り残された気がします...



2878 Re^2: TStringsPrinterのサンプルについて コメント数:  0件
  ZAB 2004/02/13 (金) 00:40
本田さん、早速の回答ありがとうございます。

おはずかしい限りです。
> uses 節を確認して下さい。
ご指摘のとおり、ずばり抜けてました。

Delphiのことが良く分かってなかったので
まさか、usesの行が2つあるとは気づかず、サンプルと何が違うのか
うんうん考えてました(^^;
おかげさまで無事コンパイルできました。



2877 Re: TStringsPrinterのサンプルについて コメント数:  1件
  本田勝彦 2004/02/12 (木) 23:10
TStringsPrinter は ver 3.0 からユニットファイル名とヘルパークラス群の
名前が変更されています。

TFormStringsPrinterEditor は StringsPrinterEditor.pas に記述
されていますので、一度 uses 節を確認して下さい。



2876 TStringsPrinterのサンプルについて コメント数:  2件
  ZAB 2004/02/12 (木) 01:35
TStringsPrinterのサンプルを参考に、TStringsPrinter(3.3)を
自作ソフトに実装しようと思ったのですが、
TFormStringsPrinterEditor.Execute(StringsPrinter1, Editor1.Lines)
の部分で、
TFormStringsPrinterEditorは未定義というエラーがでます。

サンプルプログラムのコンパイルはもちろん上手くいっているのですが
なぜなのでしょうか?
たぶん初歩的なミスだとは思うのですが、よろしくお願いします。



2875 Re^2: UndoObj コメント数:  0件
  K 2004/02/09 (月) 15:00
> 折り返し位置が変わることで EditorUnodObj が保持しているデータは全部無効になるのでそういう仕様です。
わかりました。ありがとうございます



2874 Re^4: 再びキャレット位置の絶対位置 コメント数:  0件
  いくぼ 2004/02/08 (日) 18:29
本田さん、こんにちは。

−1が返ったとき、SelStart や CharFromPos 以外にアテになるも
のが見つからなくて……。
WindowsAPIを調べたら、EM_LINEINDEX が使えそうだとわかりました。

function TFormMain.GetCaretIndex(): Integer;
begin
with ActiveEditor do
begin
Result :=
Perform(EM_LINEINDEX,
LinesToRow(RowToLines(Row)),
0)
+ ColToChar(Row, Col);
end;
end;

とくに CharFromPos で判定する必要もなく、この関数単独で
いまのところうまくいっています。



2873 Re^3: 再びキャレット位置の絶対位置 コメント数:  1件
  本田勝彦 2004/02/08 (日) 15:04
> が−1を返すため、絶対位置を知る方法がなくなります。

だから、−1が返った時だけ特別扱いすれば良いんですよね。




2872 Re: 選択領域について コメント数:  0件
  本田勝彦 2004/02/08 (日) 15:02
> こんにちははじめまして。
> TEditorでMargin.Lineを2に設定して3行ほど選択すると行間に間ができておかしく感じるのですがこれはどうやったら隙間をなくすことができますか?
> なるべく行間は2ほど空けたいのですが。

選択領域を描画しているメソッドの領域設定している部分を書き換えるか
OnDrawLine で塗りつぶすようにすると行けると思います。

procedure TEditor.Paint; からの流れを一度読んでください。



2871 Re: UndoObj コメント数:  1件
  本田勝彦 2004/02/08 (日) 14:55
> こんにちは。
> Caret.TabSpaceCount を変更すると EditorUndoObj がクリアされるのは仕様ですか?

折り返し位置が変わることで EditorUnodObj が保持しているデータは全部無効になるのでそういう仕様です。



2870 Re^2: 再びキャレット位置の絶対位置 コメント数:  2件
  いくぼ 2004/02/08 (日) 14:48
本田さん、こんにちは。

TEditorはSearch直後にヒット文字列の末尾にキャレットが移動しま
すよね。そのとき SelStart とキャレット位置がずれます。行末の
文字列にヒットした場合、キャレットが改行上になり、CharFromPos
が−1を返すため、絶対位置を知る方法がなくなります。

そのほかにも、SetRowCol でキャレットが改行上に移動する状況は
あります。

う〜ん、何かうまい方法はないものでしょうか。



2869 選択領域について コメント数:  2件
  やました 2004/02/08 (日) 14:44
こんにちははじめまして。
TEditorでMargin.Lineを2に設定して3行ほど選択すると行間に間ができておかしく感じるのですがこれはどうやったら隙間をなくすことができますか?
なるべく行間は2ほど空けたいのですが。



2868 UndoObj コメント数:  2件
  K 2004/02/08 (日) 13:18
こんにちは。
Caret.TabSpaceCount を変更すると EditorUndoObj がクリアされるのは仕様ですか?



2867 Re: 再びキャレット位置の絶対位置 コメント数:  3件
  本田 2004/02/08 (日) 12:31
アプリから利用するユーティリティーユニットに

function EditorSelStart(Editor: TEditor): Integer;

というような関数を用意して、その中で色々工夫するようにすると、
取りあえずアプリのソースは美しくなりますね。
TEditor を拡張しても、実装コードは対して変わらないと思います。

そういう意味ぢゃない?



2866 再びキャレット位置の絶対位置 コメント数:  4件
  いくぼ 2004/02/08 (日) 02:48
キャレット位置の文字コードを調べるには、ColToChar で
行内の相対位置を調べて、Lines[I] 内を探ればよい……
というのが一応の結論なのですが、キャレトット位置をき
め細かく制御しようとすると、やはりファイル先頭からの
絶対位置が知りたくなります。SelStart は、選択時や検
索直後にはキャレット位置と食い違うことがあります。

今日またいろいろ試してみて、

var
Index: Integer;
CaretPos: TPoint;
begin
GetCaretPos(CaretPos); // WindowsAPI
Index := CharFromPos(CaretPos);

これが決定版か、と喜びかけたのも束の間、キャレットが
改行文字上にあると、-1 が返ってきます(仕様どおり)。
フリーカーソル時に改行より右側にキャレットがある場合を
考慮して、このような仕様になっているのかな、と想像を逞
しくするのですが、この関数が改行位置の絶対位置を返して
くればなぁ……。

TPoint を宣言したり、WindowsAPIとTEditorのメソッドを2
段構えにするというのも面倒なので、やはりメソッド一発で
絶対位置を知りたいっす。



2865 Re^5: TPerlFountain ver 1.03 コメント数:  0件
  K 2004/02/07 (土) 18:59
> 半角スペースをトークンとして認識するようになるワケですから・・・
> 処理速度、だけかなぁ・・・大丈夫であれば大丈夫でしょう。
わかりました。
処理速度はそんなに変わってないみたいです。



2864 Re^4: TPerlFountain ver 1.03 コメント数:  1件
  本田勝彦 2004/02/07 (土) 00:11
> 本田さんの考えうる弊害、とは大体を言うとどういったことですか?

半角スペースをトークンとして認識するようになるワケですから・・・
処理速度、だけかなぁ・・・大丈夫であれば大丈夫でしょう。

いいかげんでスンマセン。



2863 Re^3: TPerlFountain ver 1.03 コメント数:  2件
  K 2004/02/06 (金) 22:28
> SkipBlanks を override して、#32 で Exit するようにすると
> 半角スペースが認識されるようになります。
>
> が、色々弊害が出てくるような気がします。試して見て下さい。
お答えいただいてありがとうございます。
出来ました。
試してみたところ、特に弊害はないような気がします。

本田さんの考えうる弊害、とは大体を言うとどういったことですか?



2862 Re^2: 相互リンク コメント数:  0件
  靖  | touchin@ak.wakwak.com 2004/02/06 (金) 12:09
 http://park8.wakwak.com/~chin/
ありがとうございます。

帰宅後、こちらもリンクを追加させて頂きます。
本当に、ありがとうございます。



2861 Re: 相互リンク コメント数:  1件
  本田勝彦 2004/02/06 (金) 11:04
エディタ出来たんですね。おめでとうございます。リンクの件了解しました。



2860 Re^2: TPerlFountain ver 1.03 コメント数:  3件
  本田勝彦 2004/02/06 (金) 10:57
> これはどうすれば色が付くようになるでしょうか?

SkipBlanks を override して、#32 で Exit するようにすると
半角スペースが認識されるようになります。

が、色々弊害が出てくるような気がします。試して見て下さい。



2859 相互リンク コメント数:  2件
  靖  | touchin@ak.wakwak.com 2004/02/05 (木) 23:59
 http://park8.wakwak.com/~chin/
本田さん、こんばんは。
靖です。お久しぶりです。
私を覚えておられますか^^

標題の件お願いできますでしょうか?
自分のホームページは内容がほとんどなく、
しかもDelphiとは直接関係ありませんが、エディタ作りという括りには
入るかと思います。また、これからどんどん内容を増やす予定はあります。

本田さんは私のことをどう思われているかわかりませんが、
私はすごーく感謝しております。本田さんの励ましのおかげで
頑張っているんです。本当です。

よろしくお願いします。



2858 Re: TPerlFountain ver 1.03 コメント数:  4件
  K 2004/02/05 (木) 13:02
たびたびすみません。
PerlFountain ver 1.03 で、
DoubleQuotation に BkColor を設定します。
すると、
$a = "a a a a a a a a";
としたときに、半角スペース部分にBkColorが付きません。

これはどうすれば色が付くようになるでしょうか?
よろしくお願いします。



2857 Re^5: ブロックの強調表示 コメント数:  0件
  K 2004/02/05 (木) 09:09
> これをEditorEx.pasを直接編集して簡単に太字にするようなことはできないですか?
自己レスです。
太字になってますね^^;
すみません。



2856 Re^4: ブロックの強調表示 コメント数:  1件
  K 2004/02/05 (木) 08:34
> 対応はしていますがバグがありますので、最新の2.76をお使いください。
> 使い方は、オブジェクトインスペクタでExMarks.ParenMark.VisibleをTrueにセットするだけです。
出来ました^^
ありがとうございます。

これをEditorEx.pasを直接編集して簡単に太字にするようなことはできないですか?



2855 Re^3: ブロックの強調表示 コメント数:  2件
  Km 2004/02/05 (木) 01:25
Kさん、こんにちは。

> 私は現在TEditorEx2.73も使わせて頂いていますが、このバージョンでは対応していますか?
> SetParenInfo あたりではないか、とふんでいるのですが。

対応はしていますがバグがありますので、最新の2.76をお使いください。
使い方は、オブジェクトインスペクタでExMarks.ParenMark.VisibleをTrueにセットするだけです。



2854 Re^2: 改行時の処理 コメント数:  0件
  ZAB 2004/02/05 (木) 00:07
Kmさん、こんばんは

> 移動すると思いますが、何か情報が不足してるようです。

すみません。確かにキャレットは動きました。
僕の確認コードの方の問題でした。
もう少し試行錯誤してみます。



2853 Re^2: ブロックの強調表示 コメント数:  3件
  K 2004/02/04 (水) 22:58
> Km さんの新バージョンがこれに挑戦されていたと思います。
あ、この掲示板に書きこまれてるKmさんってあのKmさんなんですね。
気づきませんでした^^;

Kmさん、お気づきでしたらご返答頂ければ幸いです。
私は現在TEditorEx2.73も使わせて頂いていますが、このバージョンでは対応していますか?
SetParenInfo あたりではないか、とふんでいるのですが。



2852 Re: ブロックの強調表示 コメント数:  4件
  本田勝彦 2004/02/04 (水) 21:27
> と書いた時に { に対応する } を強調表示する、ということがTEditorで可能ですか?

Km さんの新バージョンがこれに挑戦されていたと思います。



2851 ブロックの強調表示 コメント数:  5件
  K 2004/02/04 (水) 21:26
本田様
先日は素早い対応ありがとうございます。

今回は1つ質問があります。

void hoge(){

}
と書いた時に { に対応する } を強調表示する、ということがTEditorで可能ですか?
秀丸のような感じの機能ですが。