~katsuhiko メッセージボード

back 1301-1350

1351-1400

1401-1450


1400 Re^6: TEditor ver 2.13 コメント数:  0件
  本田勝彦  | 2001/07/03 (火) 10:13
> procedure TEditor.WMImeNotify(var Msg: TMessage);
> begin
>  inherited;
>  if Msg.WParam = IMN_OPENCANDIDATE then
>   CaretBeginUpdate
>  else
>   if (Msg.WParam = IMN_CLOSECANDIDATE) and
>    (FCaretUpdateCount > 0) then
>    CaretEndUpdate;
> end;

これだと、候補リストが消えた時にキャレットが復帰しませんね(^^;
CaretEndUpdate メソッドで FCaretUpdateCount を参照する方式に
したいと思います。



1399 Re^5: TEditor ver 2.13 コメント数:  1件
  本田勝彦  | 2001/07/01 (日) 23:23
 http://member.nifty.ne.jp/~katsuhiko
> 候補リストボックスの影に隠れる部分のキャレットがゴミになったんですよね。
> 画面下端で変換処理を行、候補リストが入力位置よりも上に出たとき発生して
> ました。

WM_IME_NOTIFY メッセージハンドラを削除したところ、ウチの98ノートでは
やはりこの症状が出るようです。

procedure TEditor.WMImeNotify(var Msg: TMessage);
begin
 inherited;
 if Msg.WParam = IMN_OPENCANDIDATE then
  CaretBeginUpdate
 else
  if (Msg.WParam = IMN_CLOSECANDIDATE) and
   (FCaretUpdateCount > 0) then
   CaretEndUpdate;
end;

というような実装にしたいと思います。

> 信じると痛い目に逢う IME メッセージ(字余り)

SDK 守ってちょうだい書いた人。
SDK 信じる人は馬鹿を見る。
IME なんでもありなの?恥を知れぇぃ。

ちょっとすっきり(^^;



1398 Re^6: ご苦労様でした! コメント数:  0件
  みずほちゃん  | 2001/07/01 (日) 15:54
 http://www.portnet.ne.jp/~mzh/
ちょっと思うところがあるので、とりあえず
出来るところまで実装してみようと思います。

アドバイスどうもありがとうございました。



1397 Re^5: ご苦労様でした! コメント数:  1件
  本田勝彦  | 2001/06/30 (土) 23:53
 http://member.nifty.ne.jp/~katsuhiko
> > なして、一度に全トークンが欲しいのでしょう?
> 動的略語展開の機能を実装したいからです。

見てきました。以前 Netscape の開発部隊がコーディングする様子がNHKで
放映されていた時、画面にコードが勝手にばしばし出てくるのを見たことが
ありますが、あれですかね?

TParser は速いんですよ。数万行のファイルからデータを抽出するのも
コンマ数秒というパフォーマンスなので、強力だと思います。

TFountainParser が TStream を扱えるようになったとしても、
Lines.Text の取得がこれに比べると時間とメモリを消費しますので、
読みとり専用 TStringsStream のようなクラスを実装できるとかなりの
パフォーマンスを出せるかもしれませんね。




1396 Re^4: ご苦労様でした! コメント数:  2件
  みずほちゃん  | 2001/06/30 (土) 16:42
 http://www.portnet.ne.jp/~mzh/
> TFountainParser は、ストリームを扱えるようにはなってないので Fountain
> 固有は無理ですね。個別に拡張は嫌っしょ?
>
> なして、一度に全トークンが欲しいのでしょう?
動的略語展開の機能を実装したいからです。
一度に全トークンというのは大げさでしたが、
場合によってはかなりの数のトークンをスキャンする必要があります。

動的略語展開に関しては

http://www.geocities.co.jp/SiliconValley-PaloAlto/5236/mule/dabbrev.html

くらいが参考になると思います。

# もっとも動的略語展開を実装する
# 自信はあまり無いのです。


無料で使えるWindows用エディターの中では
xyzzy と Meadow にこの機能があります。

xyzzy http://www.jsdlab.co.jp/~kamei/
Meadow http://www.netlaputa.ne.jp/~kose/Emacs/Meadow/index.html#Meadow-current

# 普通のWindows使いは
# xyzzyとMeadowを使わないほうが良いです。
# 馴れないうちは発狂しそうになります(^^;



1395 Re^3: ご苦労様でした! コメント数:  3件
  本田勝彦  | 2001/06/30 (土) 15:11
> Ms.Position := 0 //追加

こりゃ失礼(^^; 追加してください。よくやるんですよねこれ(^^;

> 上記の方法だとそれぞれのFountain固有のトークンが扱えない
> と思うのですが、これ以外に高速に全トークンを
> 取得する方法はありませんか?

TFountainParser は、ストリームを扱えるようにはなってないので Fountain
固有は無理ですね。個別に拡張は嫌っしょ?

なして、一度に全トークンが欲しいのでしょう?



1394 Re^4: TEditor ver 2.13 コメント数:  2件
  本田勝彦  | 2001/06/30 (土) 15:05
> 実は…既に消し去ってしばらく使っています。(^^;
> 問題なさそうですねー(^-^)

候補リストボックスの影に隠れる部分のキャレットがゴミになったんですよね。
画面下端で変換処理を行、候補リストが入力位置よりも上に出たとき発生して
ました。

その症状の出ていたウチの98ノートでも今の描画方式ではだいじょぶなよう
なので、次のからは抹殺したいと思います。

信じると痛い目に逢う IME メッセージ(字余り)



1393 Re^2: ご苦労様でした! コメント数:  4件
  みずほちゃん  | 2001/06/30 (土) 14:53
 http://www.portnet.ne.jp/~mzh/
横から割り込みますが。

> やりかた自体は問題無いと思います。他の方法といっても・・・
> Editor1.Lines.SaveToStream(Ms); // Ms: TMemoryStream
> Parser: TParser; // cf classes.pas
> Parser := TParser.Create(Ms);

Ms.Position := 0 //追加

> while Parser.Token <> toEof do
> begin
>  if Parser.Token = Classes.toSymbol then
>  begin
>   // 処理
>   // Parser.SourcePos, Parser.SourceLine, Parser.TokenString など利用可
>  end;
>  Parser.NextToken;
> end;

トークンを取得する前に Ms.Position := 0 をしないと、
いきなりtoEofが来て悲しい思いをするみたいです。

# 実際、悲しい思いをしました(^^;

上記の方法だとそれぞれのFountain固有のトークンが扱えない
と思うのですが、これ以外に高速に全トークンを
取得する方法はありませんか?

# 聞いてばかりですいません。



1392 Re^3: TEditor ver 2.13 コメント数:  3件
  てらお  | 2001/06/30 (土) 00:09
 http://www2s.biglobe.ne.jp/~t-susumu/toclip/
てらおです。

> WM_IME_NOTIFY メッセージハンドラですが、これ、MiGrep でソールフォルダを
> 探索した結果 ver 0.61 で実装されています。懐かしいなぁ(遠い目)
> 当時は、ちらつきを極限まで押さえ込むために、かなりトリッキーな描画ルーチンを
> 利用しておりました。で、この処理が必要になったようです。
>
> 試しに、メッセージハンドラ自体を抹殺しても、問題ありませんでした。(^^;
> 過去の遺物を引きずっていたようです(^^;;;;;
>
> 宣言部、実現部とも消し去って試して見て頂けますでしょうか。

実は…既に消し去ってしばらく使っています。(^^;
問題なさそうですねー(^-^)



1391 Re: ご苦労様でした! コメント数:  5件
  本田勝彦  | 2001/06/29 (金) 23:54
 http://member.nifty.ne.jp/~katsuhiko
> 早速の対応ありがとうございました〜^^
> 新バージョン利用させていただきましたが、ちゃんと直ってました!<当たり前ですね;;;

レポートどうもでした。言われるまで全然わからんかったんですわ(^^;

> というようにやることにしたのを思い出しました(笑) …なんか、かなり怪しげな方法だとは思っていますが、ひょっとして他の方法もあったりするでしょうか???

やりかた自体は問題無いと思います。他の方法といっても・・・
Editor1.Lines.SaveToStream(Ms); // Ms: TMemoryStream
Parser: TParser; // cf classes.pas
Parser := TParser.Create(Ms);
while Parser.Token <> toEof do
begin
 if Parser.Token = Classes.toSymbol then
 begin
  // 処理
  // Parser.SourcePos, Parser.SourceLine, Parser.TokenString など利用可
 end;
 Parser.NextToken;
end;

なら、少し(かなりか^^;)速くなりますよ。



1390 Re^2: TEditor ver 2.13 コメント数:  4件
  本田勝彦  | 2001/06/29 (金) 23:46
 http://member.nifty.ne.jp/~katsuhiko
> TEditor v2.13 W2K SP2 で快調に動いてますー♪

どもども(^^)v

> でも、またひとつ問題が…(^^;
>
> Wnn98 という IME では、変換中に[←][→]キーを打つ毎に、
> IMN_CLOSECANDIDATE のみが送られてくるみたいです。
> なので、確定後にキャレットが消えてしまうのです。(T.T)
> WM_IME_NOTIFY ハンドラでの対策が必要かと…

WM_IME_NOTIFY メッセージハンドラですが、これ、MiGrep でソールフォルダを
探索した結果 ver 0.61 で実装されています。懐かしいなぁ(遠い目)
当時は、ちらつきを極限まで押さえ込むために、かなりトリッキーな描画ルーチンを
利用しておりました。で、この処理が必要になったようです。

試しに、メッセージハンドラ自体を抹殺しても、問題ありませんでした。(^^;
過去の遺物を引きずっていたようです(^^;;;;;

宣言部、実現部とも消し去って試して見て頂けますでしょうか。



1389 ご苦労様でした! コメント数:  6件
  かわはら  | 2001/06/29 (金) 20:18
早速の対応ありがとうございました〜^^
新バージョン利用させていただきましたが、ちゃんと直ってました!<当たり前ですね;;;

> そのデータをリストで保持して ListString.Objects へでも
> 格納し、描画のさらなる高速化を計るとかされるのでしょうか?
いえ、そんな高等な事では全くありません;;;
テキスト内から特定トークンの文字列(例えばAnkのトークンだけ等)をリストアップするのに「全行サーチ」をしています。
…で、この前の方法だと折り返し時に上手くリストアップできないので
Parser := Editor1.ActiveFountain.ParserClass.Create(Editor1.ActiveFountain);
for H := 0 to Editor1.Lines.Count - 1 do begin
 R := TMyLines(Editor1.Lines).LinesToRow(H);
 Parser.NewData(Editor1.Lines[H], Editor1.ListData[R]);
 Parser.NextToken;
 while Parser.Token <> toEof do begin
 ...
というようにやることにしたのを思い出しました(笑) …なんか、かなり怪しげな方法だとは思っていますが、ひょっとして他の方法もあったりするでしょうか???



1388 Re: TEditor ver 2.13 コメント数:  5件
  てらお  | 2001/06/29 (金) 09:12
 http://www2s.biglobe.ne.jp/~t-susumu/toclip/
てらおです。
TEditor v2.13 W2K SP2 で快調に動いてますー♪
でも、またひとつ問題が…(^^;

Wnn98 という IME では、変換中に[←][→]キーを打つ毎に、
IMN_CLOSECANDIDATE のみが送られてくるみたいです。
なので、確定後にキャレットが消えてしまうのです。(T.T)
WM_IME_NOTIFY ハンドラでの対策が必要かと…

ちなみに…

procedure TEditor.WMImeNotify(var Msg: TMessage);
begin
 inherited;
 if Msg.WParam = IMN_OPENCANDIDATE then
 begin
  Form1.Memo1.Lines.Add('IMN_OPENCANDIDATE');
  CaretBeginUpdate;
 end
 else if Msg.WParam = IMN_CLOSECANDIDATE then
 begin
  Form1.Memo1.Lines.Add('IMN_CLOSECANDIDATE');
  CaretEndUpdate;
 end;
end;

でテストすると Memo1 は…

IMN_OPENCANDIDATE <- 変換候補が開いた
IMN_CLOSECANDIDATE <- 変換候補を閉じた(確定はしていない)
IMN_CLOSECANDIDATE <- [←]を押した
IMN_CLOSECANDIDATE <- [←]を押した
IMN_CLOSECANDIDATE <- [←]を押した
IMN_CLOSECANDIDATE <- [→]を押した
IMN_CLOSECANDIDATE <- [→]を押した

となります。



1387 TEditor ver 2.13 コメント数:  6件
  本田勝彦  | 2001/06/28 (木) 00:24
 http://member.nifty.ne.jp/~katsuhiko
公開です。

文字列リスト更新時の Tokens, PrevTokens プロパティ更新忘れバグが修正され
ました。

TFountain.CreateParser が実装されました。

WM_IME_COMPOSITON メッセージハンドラが復活し、WM_IME_CHAR メッセージハンドラは「抹殺」されました。WM_IME_CHAR メッセージによる2バイト文字は WM_CHAR メッセージハンドラで処理されるようになりました。TMemo 完全互換化計画が完了
したです\(^o^)/たぶん(^^;





1386 Re^5: AutoIndent コメント数:  0件
  ゆうきひろ  | 2001/06/26 (火) 23:51
 http://homepage2.nifty.com/ultla7/mozart/_start.htm
> …なんか見難くなってしまってごめんなさい。
> ※ソースコードのインデントに全角スペースを使ってますのでご注意
> ※関係ない処理も混じってますので解読して判別してください(^^;
>
> ちなみにオートインデントに関する情報源は↓です。
> http://nug.nasu-net.or.jp/~sakai/

 表示件数を10にしていたため思わず見逃すところでした。大変参考になりま
す。





1385 Re^9: Parser の動的生成 コメント数:  0件
  本田勝彦  | 2001/06/26 (火) 23:42
 http://member.nifty.ne.jp/~katsuhiko
> おお、うまくいきましたか。これで、BCB でも、Fountain が
> 何かを気にせずに Parser を生成できますね。

そそ、この「Fountain が何かを気にせずに」というのが ver2.1x の
最大のウリなわけで。
CreateParser メソッドの導入で、よりエレガントに隠蔽されますねぇ。
嬉しいような惜しいような(^^;;;;;



1384 Re^8: Parser の動的生成 コメント数:  1件
  KWX   | 2001/06/26 (火) 22:40
 http://homepage2.nifty.com/kwx/
本田さん、Kmさん、こんにちは。KWXです。

> > 試しにCreateParserを実装してヘルプのサンプルコードをC++に書きなおして
> > 動かしてみました。うまくいくみたいです。
>
> ご検証ありがとうございます。いかったいかった(^^)

おお、うまくいきましたか。これで、BCB でも、Fountain が
何かを気にせずに Parser を生成できますね。

> CreateParser 実装しますです。
> ParserClass.Create が使われなくなるとやだなぁ(^^;
> アンドキュメンテッドにしよう(^^;;;;;;;嘘

よろしくです(^^)

ではでは。



1383 Re^7: Parser の動的生成 コメント数:  2件
  本田勝彦  | 2001/06/26 (火) 11:20
> 試しにCreateParserを実装してヘルプのサンプルコードをC++に書きなおして
> 動かしてみました。うまくいくみたいです。

ご検証ありがとうございます。いかったいかった(^^)

> ところで、toEOFはheFountain.pasでコメントアウトされていますが、Delphi
> だと動くのでしょうか?

Classes.pas で宣言されてますので、uses さえされていればいごきます。
C++ での try finally 節の書き方参考になりました。




1382 Re^6: Parser の動的生成 コメント数:  3件
  Km   | 2001/06/26 (火) 08:32
 http://Homepage2.nifty.com/Km
> CreateParser 実装しますです。
> ParserClass.Create が使われなくなるとやだなぁ(^^;

ども。Kmです。少し乗り遅れたみたいですね(^^;
試しにCreateParserを実装してヘルプのサンプルコードをC++に書きなおして
動かしてみました。うまくいくみたいです。
ところで、toEOFはheFountain.pasでコメントアウトされていますが、Delphi
だと動くのでしょうか?

TFountainParser *Parser;
Parser = Editor1->ActiveFountain->CreateParser();
try {
Parser->NewData(Editor1->ListString[Editor1->Row],
Editor1->ListData[Editor1->Row]);
while (Parser->NextToken() != char(0)) { // toEOF
ListBox1->Items->Add(Parser->TokenString());
}
}
__finally {
delete Parser;
}



1381 最近 コメント数:  0件
  本田勝彦  | 2001/06/26 (火) 05:00
 http://member.nifty.ne.jp/~katsuhiko
ここが大変賑わって来て嬉しく思います。
TEditor ver 2.1x を皆さんが使われ出した証かと思います。

嬉しいぞぉぃ\(^o^)/

不具合などありましたら、変だなぁと感じたら、
ご意見をお聞かせ頂けると有り難いです。
よろしくお願い致します。m(_ _)m



1380 Re^5: Parser の動的生成 コメント数:  4件
  本田勝彦  | 2001/06/26 (火) 04:57
 http://member.nifty.ne.jp/~katsuhiko
> 説明が下手で申し訳ありませんが、伝わりましたでしょうか?

わかったぴょん。

CreateParser 実装しますです。
ParserClass.Create が使われなくなるとやだなぁ(^^;
アンドキュメンテッドにしよう(^^;;;;;;;嘘




1379 Re^4: Parser の動的生成 コメント数:  5件
  KWX   | 2001/06/26 (火) 03:48
 http://homepage2.nifty.com/kwx/
> > function TFountain.CreateParser: TFountainParser;
> > begin
> > Result := ParserClass.Create(Self);
> > end;
>
> これだと、C++Builder でコンパイル出来ないのでは?
> まだ理解できていない部分がありそうですね私。

いえ、大丈夫なはずでし。
BCB でも Delphi のクラス参照型を TMetaClass によって、
サポートしているのですが、その TMetaClass を元に生成
することができないのです。つまり生成部分が Pascal 側に
記述してある場合は、BCB でもそれを呼び出すことができる
わけです(^^)

説明が下手で申し訳ありませんが、伝わりましたでしょうか?



1378 Re^3: 折り返し時のバグ? コメント数:  7件
  本田勝彦  | 2001/06/26 (火) 03:13
 http://member.nifty.ne.jp/~katsuhiko
> コメントの2行目がコメントの色で描画されない件、確認出来ました。
> レポート有り難うございます。原因はまだわかってません(^^;
> お調べ致しますです。時間下さい。

原因はかなり致命的なうっかりミスでした(^^;
TEditorScreenStrings.ChangeList, DeleteList, InsertList で
データをコピーする際に、ver2.10 から導入された Items2 を処理
し忘れていました。

対応版を

http://compodev.at.infoseek.co.jp/arc/hedit213b2.lzh

に置きました。お試し下さいまし。m(_ _)m



1377 Re^3: Parser の動的生成 コメント数:  6件
  本田勝彦  | 2001/06/26 (火) 02:27
 http://member.nifty.ne.jp/~katsuhiko
> function TFountain.CreateParser: TFountainParser;
> begin
> Result := ParserClass.Create(Self);
> end;

これだと、C++Builder でコンパイル出来ないのでは?
まだ理解できていない部分がありそうですね私。



1376 Re^2: Parser の動的生成 コメント数:  7件
  KWX   | 2001/06/26 (火) 01:32
 http://homepage2.nifty.com/kwx/
どもども。

通常では、ActiveFountain を引数に生成することが
多いと思うので、

function CreateParser: TFountainParser; virtual;

function TFountain.CreateParser: TFountainParser;
begin
Result := ParserClass.Create(Self);
end;

みたいになっていればよいのかな、と。
そうすれば、TFountain コンポを作る人も面倒見る
必要が無いし。
いかがでしょうか?



1375 Re: Parser の動的生成 コメント数:  8件
  本田勝彦  | 2001/06/25 (月) 23:59
 http://member.nifty.ne.jp/~katsuhiko
クラス参照型は Delphi にしか無いんでしたね(^^;
そうかぁ・・・

> Parser := Editor1.ActiveFountain.CreateParser;

function CreateParser: TFountainParser; virtual;

function TFountain.CreateParser: TFountainParser;
begin
end;

なのがあって、C++Builder 使いの人はそれを override するという
ので良いですか? TFountain コンポを作る人は面倒見る必要は無し?

Km さんがおっしゃっていたのもこのことなのかしらん?



1374 Re^2: 折り返し時のバグ? コメント数:  8件
  本田勝彦  | 2001/06/25 (月) 23:51
 http://member.nifty.ne.jp/~katsuhiko
コメントの2行目がコメントの色で描画されない件、確認出来ました。
レポート有り難うございます。原因はまだわかってません(^^;
お調べ致しますです。時間下さい。

> の様にやっていたのですが…これって処理方法としてあってるんでしょうか?(^_^;;;

あってますよ。そのデータをリストで保持して ListString.Objects へでも
格納し、描画のさらなる高速化を計るとかされるのでしょうか?




1373 Re^5: Ctrl+Endのバグ? コメント数:  0件
  本田勝彦  | 2001/06/25 (月) 23:43
 http://member.nifty.ne.jp/~katsuhiko
全角文字を行ったり来たりというのは、そこに何かの制御コードが入って
いるのかもしれませんね。

データを TEditor にポストしている部分のコードをココに書いて頂いても
かまいませんよ。




1372 Re^2: TEditor ver2.12, TStringsPrinter ver 1.6 コメント数:  0件
  本田勝彦  | 2001/06/25 (月) 23:37
 http://member.nifty.ne.jp/~katsuhiko
> とりあえず、TEditorの部分のみ試してみました。
> ばっちりです。(^^)

どうもです(^^)
よろしかったら

http://compodev.at.infoseek.co.jp/arc/memomes.lzh

の方も試して見て頂けると有り難いのですが、
時間があったらよろしくお願い致します。



1371 Re^5: AutoIndent コメント数:  0件
  本田勝彦  | 2001/06/25 (月) 23:34
 http://member.nifty.ne.jp/~katsuhiko
そうか、OnKeyPress で出来るのですね。サンプルコードまでありがとう
ございます。

Shift := HiWord(GetKeyState(VK_SHIFT)) <> 0;

というのも参考になりました。今度使ぉ(^^;

> http://nug.nasu-net.or.jp/~sakai/

ここすごい量の Tips ですね。私も頑張らねば。



1370 Parser の動的生成 コメント数:  9件
  KWX   | 2001/06/25 (月) 22:24
 http://homepage2.nifty.com/kwx/
本田さん、こんにちは。 KWX です。

えっと、私は普段 C++Builder で、TEditor を使用しているの
ですが、C++ では仮想コンストラクタがない為、Delphi でいう

Parser := Editor1.ActiveFountain.ParserClass.Create(
Editor1.ActiveFountain);

みたいな記述ができないようです(T_T)
そこで、

Parser := Editor1.ActiveFountain.CreateParser;

という風にも書けるようになれば、BCB で現在の
Fountain に対するパーサのインスタンスが
生成できるようになるのですが、いかがでしょう?
検討していただけるとうれしいのですが。

ではでは。



1369 Re^4: Ctrl+Endのバグ? コメント数:  1件
  mas   | 2001/06/25 (月) 21:16
 http://www5.airnet.ne.jp/mas/
> > あと、ここでも発言されている私のソフトのベースとさせてもらった、ゆうきひろ> さんの Nami2000でも同様の事象が発生します。
>  発生しますねえ(^^;)。全然気づきませんでした。
>  TEditorを利用した「TeraPad」や「あうとら」ではこの症状は出ませんから
> Nami2000 のコードの方に問題がありそうです。次の2つを疑ってみる必要が
> あります。

あれれ・・・そうでしたか。大変失礼しました。
本田さん、Kmさんどうもすみませんでした。
とりあえず、ソフトのバグの可能性が濃厚になってきましたので、調査中でしたら一旦、中止していただければと思います。無駄骨になると申し訳ないので。
もー少し調べて結果をお知らせします。



1368 Re^3: Ctrl+Endのバグ? コメント数:  2件
  ゆうきひろ  | 2001/06/25 (月) 19:52
 http://homepage2.nifty.com/ultla7/mozart/_start.htm
> あと、ここでも発言されている私のソフトのベースとさせてもらった、ゆうきひろ> さんの Nami2000でも同様の事象が発生します。
 発生しますねえ(^^;)。全然気づきませんでした。
 TEditorを利用した「TeraPad」や「あうとら」ではこの症状は出ませんから
Nami2000 のコードの方に問題がありそうです。次の2つを疑ってみる必要が
あります。

TForm1.PutNode(Node: TTreeNode)
 TEditor1 の各データを TreeView1 のノードの Data へ渡す。
TForm1.GetNode(Dt: TNodeData);
 ノードの Data を TEditor1 に反映させる。
 ま、私個人はあまり気にならないバグですが、解決したら教えてくださいネ(^O^;)。



1367 Re^4: AutoIndent コメント数:  2件
  ふく郎  | 2001/06/25 (月) 18:30
 http://www05.u-page.so-net.ne.jp/qb3/toshi-j/eMemoPad/
…なんか見難くなってしまってごめんなさい。
※ソースコードのインデントに全角スペースを使ってますのでご注意
※関係ない処理も混じってますので解読して判別してください(^^;

ちなみにオートインデントに関する情報源は↓です。
http://nug.nasu-net.or.jp/~sakai/



1366 Re: 折り返し時のバグ? コメント数:  9件
  かわはら  | 2001/06/25 (月) 17:07
P.S.
この現象『総ての行に対してParserを使って単語を切り分けよう」と色々と試行錯誤しているうちに発見しました。
一応、
Parser := Editor1.ActiveFountain.ParserClass.Create(Editor1.ActiveFountain);
for H := 0 to Editor1.ListCount - 1 do begin
 Parser.NewData(Editor1.ListString[H], Editor1.ListData[H]);
 Parser.NextToken;
  while Parser.Token <> toEof do begin
  ...
の様にやっていたのですが…これって処理方法としてあってるんでしょうか?(^_^;;;



1365 折り返し時のバグ? コメント数:  10件
  かわはら  | 2001/06/25 (月) 17:03
こんにちは、いつもお世話になっています。
TEditorを使っていて、バグ(?)かもしれない現象が出ましたのでご報告します。
1.フォーム上にTEditorを貼り付け、設定で折り返しをON、ViewのCommenterを#に設定します。また、現象が判りやすいように、Commentの色設定を適当に変更しておきます。
2.Linesの内容を以下の様にします。
AAAA...AAAAA#111111[折り返し]11111
BBBBB
CCCCC...CCCCCC#222222[折り返し]22222
内容は何でもいいと思うのですが、1・3行目とはコメント内で折り返すように調整します
3.実行後そのままEnterキーを押して1行目に改行のみの行を挿入します。
4.ここでTEditorの再描画を促す行動をとります。例えば「Projectを一度最小化し再び表示」します。
5.するとCCC...CCの部分(物理行5行目)がComment色で表示され、折り返し後の22222の部分(物理行6行目)は通常色で表示されてしまいます。

当方だけの現象かとも思い、こちらに書かせていただきました。ご確認いただければ幸いです。私の試した感じでは、改行後した時にListDataが正しく更新されておらず描画がずれているのでは?と感じました。ソースコードを解析した訳ではないので、外から見た印象ですが…。



1364 Re^4: AutoIndent コメント数:  0件
  ふく郎  | 2001/06/25 (月) 13:02
 http://www05.u-page.so-net.ne.jp/qb3/toshi-j/eMemoPad/
    // 例えば5個のSPACEだけの行があり3桁目にキャレットがある場合に対応
    if i > Col then i := Col;
    // キャレットが行の途中にある時に行挿入をしようとした場合
    if Shift and (i < Col) then Col := i;
    SelText := #13#10 + Copy(CurrentLine, 1, i);
   end else
    SelText := #13#10;
   // [Shift]キーが押されていたらキャレットを戻して行を
   // 挿入したように見せる(行挿入)
   if Shift then SetRowCol(Row - 1, Col);
   Key := #0;
  end;
  if (Key = #13) and Shift and not OverWrite then begin
   Col := 0;
   SelText := #13#10;
   SetRowCol(Row - 1, Col);
   Key := #0;
  end;
 end;
end;



1363 Re^4: AutoIndent コメント数:  0件
  ふく郎  | 2001/06/25 (月) 13:02
 http://www05.u-page.so-net.ne.jp/qb3/toshi-j/eMemoPad/
procedure TMainForm1.MemoPaneKeyPress(Sender: TObject; var Key: Char);
var
 CurrentLine: WideString;
 Shift: Boolean;
 i: Integer;
begin
 if MemoPane.ReadOnly then begin
  if not (Ord(Key) = VK_SPACE) then MessageBeep(MB_OK);
  Exit;
 end;
 // Shiftキーが押されているか?
 Shift := HiWord(GetKeyState(VK_SHIFT)) <> 0;
 with MemoPane do begin
  if (Key = #13) and FAutoIndent and not OverWrite then begin
   // 現在のキャレットがある行を取り込む
   CurrentLine := Lines[RowToLines(Row)];
   if (Length(CurrentLine) > 0) and (Col > 0) then begin
    // Space・TAB・全角スペースの数を数える
    i := 0;
    while (CurrentLine[i+1] = #$20) or (CurrentLine[i+1] = #$09) or
       (CurrentLine[i+1] = #$81#$40) do begin
     Inc(i);
    end;
(続く)



1362 Re^3: AutoIndent コメント数:  5件
  ふく郎  | 2001/06/25 (月) 12:59
 http://www05.u-page.so-net.ne.jp/qb3/toshi-j/eMemoPad/
こんにちは。ふく郎です。
ぼくもゆうきひろさんと同じようにしたくて、アプリ側で自前の実装をしています。
ご参考まで...

※「MemoPane」というのは拙作 eMemoPad のエディタ部分の名称です。
※[Shift]+[Enter]による行挿入の機能も入ってます(^^;



1361 Re^3: ダブルクリックによる単語の選択 コメント数:  0件
  清明  | 2001/06/25 (月) 09:07
ども、清明です。
早々の回答ありがとうございました。無事解決いたしました。

>>with Editor1 do
>> Parser.NewData(ExpandTab(ListString[Row], ListData[Row]);
>とするとうまく行くと思います。ヘルプファイルの SelectTokenxxxx のトピックも
>参考にして見て下さいね。




1360 Re^3: Ctrl+Endのバグ? コメント数:  0件
  mas   | 2001/06/24 (日) 23:33
 http://www5.airnet.ne.jp/mas/
> masさんはWindows2000だったと思いますが、そのためでしょうか。
> 私も少し調べてみますね。
> (Windows2000をテスト用に入れなおしたらはまった(ToT))

お世話になってます。TEditorExのおかげでずいぶん楽をさせてもらってます。
最初、TEditorExのほうも疑ってみたんですが(すみません)、素のTEditorでも発生したので・・・

確かに環境を書いておくべきでした。環境はWindows2000です。
今、WindowsMeでも試したのですが、同様でした。
9xの環境は家にはないので、明日、会社で試してみます。



1359 Re^2: Ctrl+Endのバグ? コメント数:  3件
  mas   | 2001/06/24 (日) 23:28
 http://www5.airnet.ne.jp/mas/
> アウトラインプロセッサということなので、どこかからコピーした上記のような
> データがそのまま蓄積されている可能性は有りますね。ウチでもも少し調べて見ます。

直接入力してもそうなりますので、調べてもらえると助かります。
面白いことに文末が全角文字だと、Ctrl+Endを押す度に最後の文字の前後に交互にキャレットが移動します。
あと、ここでも発言されている私のソフトのベースとさせてもらった、ゆうきひろさんの Nami2000でも同様の事象が発生します。

> リンクさしてもらってもよろしいですか?

はい。よろしくお願いします。



1358 Re^2: Ctrl+Endのバグ? コメント数:  1件
  Km   | 2001/06/24 (日) 18:40
 http://Homepage2.nifty.com/Km
> ウチのエディタでは確認できないのですが、ブラウザでコピーした改行が #13 だけ
> のデータを貼り付けると、キャレット位置がちょっとずれるというのは経験ありです。

TEditor 2.12とTEditor 2.00 の組合せでWindows98SEでは大丈夫でした。
masさんはWindows2000だったと思いますが、そのためでしょうか。
私も少し調べてみますね。
(Windows2000をテスト用に入れなおしたらはまった(ToT))





1357 Windows2000 再び コメント数:  0件
  本田勝彦  | 2001/06/24 (日) 18:02
http://compodev.at.infoseek.co.jp/ime.html
http://compodev.at.infoseek.co.jp/arc/memomes.lzh

に新対応バージョンを置きました。詳細は ime.html をご覧下さい。
TEditor 2.12 では、SendMessage(Editor1.Handle, WM_CHAR, Ord('V'), 0);
としても無視されてましたが、今度のは、TMemo 完全互換を目指しています。

WM_IME_CHAR で CharCode をいじってはいけないということのようです。
WM_CHAR で2バイト文字を取得していますので、よろしかったらお試し下さい。

Windows2000 での動作が心配なので Windows2000 な方のご協力を宜しくお願い
致します。m(_ _)m





1356 Re: Ctrl+Endのバグ? コメント数:  6件
  本田勝彦  | 2001/06/24 (日) 17:55
ウチのエディタでは確認できないのですが、ブラウザでコピーした改行が #13 だけ
のデータを貼り付けると、キャレット位置がちょっとずれるというのは経験ありです。
アウトラインプロセッサということなので、どこかからコピーした上記のような
データがそのまま蓄積されている可能性は有りますね。ウチでもも少し調べて見ます。

リンクさしてもらってもよろしいですか?



1355 Re: TEditor ver2.12, TStringsPrinter ver 1.6 コメント数:  1件
  Kou   | 2001/06/24 (日) 11:06
> TEditor ver2.12 では Windows2000(ばかやろ〜^^;)対策が施されました。
> 私のしつこい質問&テストアプリにお付き合い頂いた、てらおさん、Kou さんには
> 心より感謝と敬意を捧げます。ありがとうございました。m(_ _)m

こちらこそ、ありがとうございます。
とりあえず、TEditorの部分のみ試してみました。
ばっちりです。(^^)

これからも頑張ってくださいね〜。
それでは。



1354 Ctrl+Endのバグ? コメント数:  7件
  mas   | 2001/06/24 (日) 00:18
 http://www5.airnet.ne.jp/mas/
こんばんは。masです。
TEditor(TEditorEx)を使ってアウトラインプロセッサを公開してます。

と、前置きはこれくらいにして・・・
タイトルのとおり、Ctrl+Endで文末にキャレットが移動すると思うのですが、この動作が変です。

具体的には、最終行の文末に半角文字とEOFがあるとき、文末の1バイト前にとんでしまいます。
最終行がEOFのときは、EOFの前の行の行末にキャレットがとびます。

どちらも動作がおかしいと思いますので、修正していただけると助かります。

ではでは!



1353 Re^2: AutoIndent コメント数:  6件
  ゆうきひろ  | 2001/06/23 (土) 07:58
 http://homepage2.nifty.com/ultla7/mozart/_start.htm
> 結構大変だったりします(^^;
 
> この辺も、将来のバージョンの参考にさせて頂きたいと思います。
 はい、気長に待ちます(^^;)。



1352 Re^2: トークンについて コメント数:  0件
  海苔巻  | 2001/06/23 (土) 06:58
こんにちは。海苔巻です。
すばやいレスありがとうございます。
自己解決しました。

> デバッガが見ている .dcu が古いままなのではないでしょうか?
> 該当プロジェクトを開いて、Delphi のメニューにある [プロジェクト|再構築]
> を実行されてみてはいかがでしょう?

多分そうだと思います。僕がとった行動は...
TFountainコンポーネントを配置してもう一度コンパイル
してみたら直りました。

お騒がせしました。

海苔巻



1351 TEditor ver2.12, TStringsPrinter ver 1.6 コメント数:  2件
  本田勝彦  | 2001/06/23 (土) 00:12
 http://member.nifty.ne.jp/~katsuhiko
公開です。

TEditor ver2.12 では Windows2000(ばかやろ〜^^;)対策が施されました。
私のしつこい質問&テストアプリにお付き合い頂いた、てらおさん、Kou さんには
心より感謝と敬意を捧げます。ありがとうございました。m(_ _)m

TStoreComponent.WriteReg, ReadReg の引数が変わりましたので、
それに対応すべく TStringsPrinter も ver 1.6 になりました。

heClasses.pas の整合性を保つため、ご利用の皆様には両方ダウンロード
して下さいませ。m(_ _)m