[PR]生年月日で2010年占い鑑定:初回無料!貴女の運命運勢を占う

~katsuhiko メッセージボード

back 2101-2150

2151-2200

2201-2250


2200 再変換したい コメント数:  9件
  ほしけん  | 2002/05/20 (月) 10:17
 http://www.hosiken.Afis.To/
もう一点質問させてください。m(_ _)m

TEditorに、IMEの再変換機能を実装させたいと思っているのですが、
再変換に関する資料などがほとんど見つからず、困っています。
どこのサイトをでも、「読み仮名を求める」という段階で止まっていて、
再変換までたどり着けません。

唯一、VB用の再変換のサンプルコードを見つけたので、Delphiへの移植も
何度か挑戦してみたのですが、VBとの相違点を吸収しきれず、すべて断念
しています。そんなこんなでかれこれ1年程悩んでいます。

何か、再変換で参考になる情報等をお持ちの方がいましたら、
どうか教えてください。よろしくお願いします。



2199 Re: Tabキーでインデントさせたい コメント数:  1件
  本田勝彦 2002/05/20 (月) 10:17
VK_TAB は WM_CHAR で処理されているので、OnKeyPress で処理されると良いと思います。試してません(^^;



2198 Tabキーでインデントさせたい コメント数:  2件
  ほしけん  | 2002/05/20 (月) 09:05
 http://www.hosiken.Afis.To/
おはようございます。久しぶりに書き込みさせていただきます。m(_ _)m
TEditor V2.37 で、範囲選択をしてTabキーを押すことにより、選択範囲の行を
インデントさせたいのですが、以下のコードでうまく動きません。

procedure TForm1.Editor1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
// Tabキーでインデント
if Editor1.Selected and (Key = 9) then
begin
Key := 0;
if ssShift in Shift then
Editor1.SelTabUnIndent
else
Editor1.SelTabIndent;
end;
end;

Key := 0; とやれば、キー入力が取り消されるはずですよね。
しかし、実際には、インデントの後に、選択範囲全体が1つのTab文字に
置き換わってしまいます。

Shift+Tabによるアンインデントはうまく動作しています。
何か、代替の手段等はありますでしょうか? ご教授願います。



2197 Re^2: 改行以降を選択されないようにする コメント数:  0件
  Shota   | 2002/05/20 (月) 07:38
ども、ありがとうございます。
> コメントアウトすればダイジョブかもしれませんが、ちゃんとした実装にする場合は、以前ここでも話題になりましたが、DrawSelectionLine, DrawSelectionBox のソース書き換えで対応して下さい。
んーoverride出来ないと怒られたので、
TEditorのソースを直接編集するということでしょうか。
それはちょっと怖いですね。
派生クラスでできる範囲の拡張にとどめておきます(^^;



2196 Re: 改行以降を選択されないようにする コメント数:  1件
  本田勝彦 2002/05/20 (月) 01:05
んとねぇ、OnDrawLine イベントハンドラ呼び出し元の DoDrawLine を呼び出している PaintLine, PaintLineSelected の中で、描画する文字列が横スクロールによって隠れている場合は、処理をスキップして速度を稼いでいます。(ver 2.37 の場合 PaintLine の 9,277 行目)当然 OnDrawLine イベントが発生しません。
コメントアウトすればダイジョブかもしれませんが、ちゃんとした実装にする場合は、以前ここでも話題になりましたが、DrawSelectionLine, DrawSelectionBox のソース書き換えで対応して下さい。




2195 改行以降を選択されないようにする コメント数:  2件
  Shota   | 2002/05/19 (日) 23:04
Q&Aにあったコードですが、バグがあるようです。
選択した状態で横スクロールするととんでもないことになってます(^^;
自分でRectAngleを使ったりなんだりしてみたのですが、
解決できませんでした。
描画後に上から白で消すよりも描画する時から塗りつぶしの範囲を制限した方が
速いと思うのですが、
これもTEditorから派生させたりとかでできるんでしょうか?



2194 Re^2: Shift+マウスホイールでカーソルの行移動を行うには コメント数:  0件
  Shota   | 2002/05/19 (日) 21:54
> 試してないですが、
>
> > Sendmessage(Handle, WM_KEYDOWN, VK_UP, 0);
> > Sendmessage(Handle, WM_KEYUP, VK_UP, 0);
>
> ここを
>
> Row := Row + 1;
>
> というダサダサにすると旨く行くように思いますが。
うまくいきました!ぜんぜんダサくないですよ。
というかかっこつけてinc(Row)とかやってエラー出してる僕がダサいですね(^^;



2193 Re: Shift+マウスホイールでカーソルの行移動を行うには コメント数:  1件
  本田勝彦 2002/05/19 (日) 21:10
試してないですが、

> Sendmessage(Handle, WM_KEYDOWN, VK_UP, 0);
> Sendmessage(Handle, WM_KEYUP, VK_UP, 0);

ここを

Row := Row + 1;

というダサダサにすると旨く行くように思いますが。



2192 Shift+マウスホイールでカーソルの行移動を行うには コメント数:  2件
  Shota   | 2002/05/19 (日) 16:09
DelphiのIDEなどでShift+ホイールでカーソルが
上の行へ行ったり下の行へ行ったりできますね。
あれをTEditorでやろうとして、
TEditorを継承したクラスを作成し、WMMousewheelイベントで
if GetAsyncKeyState(VK_SHIFT) <> 0 then begin
// Shift + Mousewheel キャレット移動
if (Msg.WParam > 0) then begin
Sendmessage(Handle, WM_KEYDOWN, VK_UP, 0);
Sendmessage(Handle, WM_KEYUP, VK_UP, 0);
end else begin
Sendmessage(Handle, WM_KEYDOWN, VK_DOWN, 0);
Sendmessage(Handle, WM_KEYUP, VK_DOWN, 0);
end;
CleanSelection;
end else begin



といった感じのコードを書いてカーソルを押した後に選択範囲解除という
無理矢理な実装を試してみたのですが、
案の定一瞬選択された状態になってしまって、
見た目が悪いのと、ここでもし切り取りなどされたらまずいので、
何とかして選択なしでShift+ホイールでカーソルの移動を行いたいのですが・・・
ちなみにCtrlだとPageUp、PageDownするようになってるので
キーを変えるというのはなしです(^^;
御願いします。



2191 Re^2: Undo,Redoが行われたときに コメント数:  0件
  Shota 2002/05/19 (日) 16:04
そのような方法があったのですね!
ありがとうございます。
おかげさまで解決しました。



2190 Re^3: BCB6にTEditorをインストール コメント数:  1件
  かみまま  | 2002/05/18 (土) 18:04
> > さて、私も先日BCB6Proを購入致しました。
> > 早速TEditor2.36をインストールしたところ
> > [リンカ致命的エラー]Fatal:ファイルCOLORGRD.OBJが開けません。
> > とBCB6に言われ、インストール出来ませんでした。
> > 同じような現象が出た方はいらっしゃいますか?
>
> パッケージをいったん閉じてから開きなおしたらどうでしょうか?
>
> TEditor (TEditorEx)の詳しいインストール方法を図入りで作ってみました。
本田勝彦さん、Kmさん、こんにちわ
お手数おかけいたします。
月曜日(5/21)になりましたら再度インストール
を試して、結果をご報告いたします。
ではでは



2189 Re^2: BCBでのTRegManager利用法 コメント数:  0件
  みるく 2002/05/18 (土) 15:09
> RegManager1->Filers["Label2Font"]->WriteFont(Label2->Font);
> こんな感じではないでしょうか。
お返事ありがとうございます。
報告が遅れましたが、無事に動作しました。
ありがとうございました。



2188 Re^3: BCB6にTEditorをインストール コメント数:  0件
  本田勝彦 2002/05/18 (土) 11:56
> TEditor (TEditorEx)の詳しいインストール方法を図入りで作ってみました。

おぉ良いですねぇ。ありがとうございます。お手数をおかけいたしました。



2187 Re^2: BCB6にTEditorをインストール コメント数:  3件
  Km   | 2002/05/18 (土) 07:03
 http://homepage2.nifty.com/Km/
> さて、私も先日BCB6Proを購入致しました。
> 早速TEditor2.36をインストールしたところ
> [リンカ致命的エラー]Fatal:ファイルCOLORGRD.OBJが開けません。
> とBCB6に言われ、インストール出来ませんでした。
> 同じような現象が出た方はいらっしゃいますか?

パッケージをいったん閉じてから開きなおしたらどうでしょうか?

TEditor (TEditorEx)の詳しいインストール方法を図入りで作ってみました。



2186 Re^2: BCB6にTEditorをインストール コメント数:  0件
  本田勝彦 2002/05/17 (金) 18:29
申し訳ないですが、私は C++Builder を飼っていないので、的確なアドバイスが出来ません。

ColorGrd ネタであれば、ヘルプファイルの「C++Builder での利用」のトピックや、ここの過去ログ、Q&Aにもいくつかのトピックがあります。









2185 Re: BCB6にTEditorをインストール コメント数:  5件
  かみまま  | 2002/05/17 (金) 16:25
> BCB6が着たので、早速TEditorとTOleddEditorをインストールしてみました。
> とりあえず、heverdef.incにBCB6用のVER140を追加しました。
> 次に、Requiresにvclsmp.bpi、vclx.bpiを追加するとbcbsmp.bpiとbcbie.bpiが追加されました。designide.bpiも追加されてました。オプションソースのPFLAGSに-LUDesignIdeを追加して終わりです。
>
> TOleddEditorの方はやはりhOledd.pasを書き換えないとBCB6ではエラーとなりました。BCBな人はTEditorExに変更したhOledd.pasを同梱しているのでそれを使うと自分で書き換える手間が省けると思います。

はじめまして
かみままと申します。よろしくお願い致します。
さて、私も先日BCB6Proを購入致しました。
早速TEditor2.36をインストールしたところ
[リンカ致命的エラー]Fatal:ファイルCOLORGRD.OBJが開けません。
とBCB6に言われ、インストール出来ませんでした。
同じような現象が出た方はいらっしゃいますか?
もう少しがんばってみますが、何かアドバイスいただければ
幸いと思っています。m(_ _)m
ではでは




2184 Re: BCBでのTRegManager利用法 コメント数:  1件
  Km   | 2002/05/16 (木) 17:37
> RegManager1['Label2Font'].WriteFont(Label2.Font);
> これをどうやって書けばいいのかわかりません。

試していないのでわからないのですが、デフォルトプロパティがFiltersなので、
RegManager1->Filers["Label2Font"]->WriteFont(Label2->Font);
こんな感じではないでしょうか。



2183 BCBでのTRegManager利用法 コメント数:  2件
  みるく 2002/05/15 (水) 19:31
こんにちは。
TRegManagerをBCBで使おうとしてるのですが、出来ないのでしょうか?
とりあえずインストールは出来ているのですが
RegManager1['Label2Font'].WriteFont(Label2.Font);
これをどうやって書けばいいのかわかりません。

もし出来るのなら、方法を教えてください。
よろしくお願いします。



2182 Re: 文末行頭からの文字追加・削除でのスクロール コメント数:  0件
  sakazuki   | 2002/05/13 (月) 13:27
sakazukiです。
> 上にかぶっているダイアログを必要に応じて再描画するのが
> お作法のように思いますが、いかがでしょう?
最初はそうしようと思ったのです。が、この症状がでるのが文末でなおかつ行頭のと
きのみで、最終行に1文字でも文字があれば同症状は発生しないため、なんとかなら
ないかなーと思って調べてみたのでした。

> > これらの数値は、どうもUndoObjectと関係がありそうに見受けられるのですが、果たしてこんな変更をしてしまって他に影響がないかと心配なのですが、いかがなものでしょうか?
>
> 結構悩んで色々と試行錯誤を繰り返した割には、理論的にこれが良いという
> 描画手順が見つけられない部分ですので、何とも言えません(^^;

そうですか。とりあえず、特にUndo,Redoも不具合なく動いている様なのでしばらく
このまま使ってみようと思います。
ありがとうございました。



2181 Re: 文末行頭からの文字追加・削除でのスクロール コメント数:  1件
  本田勝彦 2002/05/13 (月) 11:13
上にかぶっているダイアログを必要に応じて再描画するのが
お作法のように思いますが、いかがでしょう?


> これらの数値は、どうもUndoObjectと関係がありそうに見受けられるのですが、果たしてこんな変更をしてしまって他に影響がないかと心配なのですが、いかがなものでしょうか?

結構悩んで色々と試行錯誤を繰り返した割には、理論的にこれが良いという
描画手順が見つけられない部分ですので、何とも言えません(^^;

見つからない



2180 Re: Undo,Redoが行われたときに コメント数:  1件
  Km   | 2002/05/12 (日) 15:06
 http://homepage2.nifty.com/Km/
> EditorのOnChangeで
> EditUndoAction.Enabled := TEditForm.Editor.CanUndo;
> というようなコードでアンドゥのメニューのEnabledを切り替えているのですが、
> これだとOnChangeが発生したときにまだCanUndoが更新されていないようで、
> これ以上UndoできなくなってもメニューのEnabledがFalseになりません。

ActionListを使っていることを前提としますが、OnUpdate時に書くとよいでしょう。

procedure TForm1.UndoActionExecute(Sender: TObject);
begin
Editor1.Undo;
end;

procedure TForm1.UndoActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor1.CanUndo;
end;

procedure TForm1.RedoActionExecute(Sender: TObject);
begin
Editor1.Redo;
end;

procedure TForm1.RedoActionUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor1.CanRedo;
end;



2179 Undo,Redoが行われたときに コメント数:  2件
  Shota 2002/05/12 (日) 14:49
はじめまして。TEditor使わせていただきます。
中学生なんで送金はお金が溜まってできるときにやります。

さて、早速質問なんですが、
EditorのOnChangeで
EditUndoAction.Enabled := TEditForm.Editor.CanUndo;
というようなコードでアンドゥのメニューのEnabledを切り替えているのですが、
これだとOnChangeが発生したときにまだCanUndoが更新されていないようで、
これ以上UndoできなくなってもメニューのEnabledがFalseになりません。

よろしく御願いします。



2178 文末行頭からの文字追加・削除でのスクロール コメント数:  2件
  sakazuki   | 2002/05/12 (日) 07:34
 http://homepage2.nifty.com/sakazuki/rde.html
sakazukiです。質問があります。

3|
4|[EOF]
|
から(http://homepage2.nifty.com/sakazuki/img/im1.PNG)
3|
4|A[EOF]
|
と入力した場合、描画処理でスクロールが発生し、4行目の画像が5行目以降にぶれてしまいます。(http://homepage2.nifty.com/sakazuki/img/im2.PNG)
また、逆に
3|
4|A[EOF]
|
から(http://homepage2.nifty.com/sakazuki/img/im3.PNG)
3|
4|[EOF]
|
とすると、4行目の画像が2行目以前にぶれてしまいます。(http://homepage2.nifty.com/sakazuki/img/im4.PNG)
調べてみると、HEditor.pasのTEditorScreen.Update内で前者のときは、Ir = 1, Dr = 0、後者のときは、Ir = 0, Dr = 1となって、スクロールをさせる処理を通っていることがわかりました。そこで、処理をたどってTEditorScreenStrings.ListInfoの2424行目TakenRowCount の初期値を0から1,TEditorScreenStrings.UpdateListの2730行目Irの初期値を0から1としてみると、行頭での文字追加、削除でもスクロールが発生しなくなりました。
これらの数値は、どうもUndoObjectと関係がありそうに見受けられるのですが、果たしてこんな変更をしてしまって他に影響がないかと心配なのですが、いかがなものでしょうか?



2177 Re^4: insertについて コメント数:  0件
  atzun   | 2002/05/10 (金) 14:27
kmさんありがとう、うまくいきます。

> insertは Editor.Lines.insert(integer、string); でいいのでしょうか。
これはTEditorのソースの中では
 procedure incert(Index:integer;const S:String);override;
となっているのを使うんだな、と思ったのですが。
> 数百行程度ならかまわないと思うのですが、ファイルということで数万行〜数十万行になったら挿入処理にとても時間がかかると思います。前にも書きましたが、SelTextに代入するのがよいでしょう。今回はDelphiで書いてみました。

> SaveDialog1.FileName := OpenDialog1.FileName;
> Sl := TStringList.Create;
> Sl.LoadFromFile(OpenDialog1.FileName);
> Editor1.SelText := SL.Text;
> SL.Free;
この部分が大きな成果です。

で、kmさんが前から勉強させてもらっているTEditorExの方だと知り、
感謝が倍になりました。



2176 Re^3: insertについて コメント数:  1件
  Km   | 2002/05/09 (木) 00:53
 http://homepage2.nifty.com/Km/
> insertは Editor.Lines.insert(integer、string); でいいのでしょうか。

数百行程度ならかまわないと思うのですが、ファイルということで数万行〜数十万行になったら挿入処理にとても時間がかかると思います。前にも書きましたが、SelTextに代入するのがよいでしょう。今回はDelphiで書いてみました。

procedure TForm1.OpenExecute(Sender: TObject);
var
SL: TStringList;
begin
if OpenDialog1.Execute then
begin
SaveDialog1.FileName := OpenDialog1.FileName;
Sl := TStringList.Create;
Sl.LoadFromFile(OpenDialog1.FileName);
Editor1.SelText := SL.Text;
SL.Free;
end;
end;

procedure TForm1.SaveExecute(Sender: TObject);
begin
if SaveDialog1.FileName = '' then
SaveAs.Execute
else
Editor1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.SaveAsExecute(Sender: TObject);
begin
if SaveDialog1.Execute then
Editor1.Lines.SaveToFile(SaveDialog1.FileName);
end;



2175 Re^3: insertについて コメント数:  0件
  Km   | 2002/05/09 (木) 00:52
 http://homepage2.nifty.com/Km/
> > CloseFileする前にAssignFileしてるとかないですか?

ちょっと書き方が悪かったですね。上書きということで、AssignFileしているファイルに対してCloseFileする前にまたAssignFileでもしているのかなと思ったので、書いてみました。



2174 Re^2: insertについて コメント数:  3件
  atzun   | 2002/05/08 (水) 16:05

> CloseFileする前にAssignFileしてるとかないですか?

Openしたファイル名をReadInで読み込むのにTextFileにAssignFileしてます。
ほかのEditorコンポーネントでは問題なかったので。

innsertは Editor.Lines.insert(integer、string); でいいのでしょうか。



2173 Re: insertについて コメント数:  4件
  Km   | 2002/05/08 (水) 07:56
 http://homepage2.nifty.com/Km/
> ファイルをカレット位置に読み込むのに ReadIn(fText,sLine);で一行づつ
> 読み込み、 Editor1.Lines.Insert(ypos,sLine); としたら、
> 名前をつけて保存ではOKですが、上書き保存ではエラーが出ます。
> 教えてください。

CloseFileする前にAssignFileしてるとかないですか?



2172 Re: insertについて コメント数:  0件
  Km   | 2002/05/07 (火) 23:13
> ファイルをカレット位置に読み込むのに ReadIn(fText,sLine);で一行づつ
> 読み込み、 Editor1.Lines.Insert(ypos,sLine); としたら、
> 名前をつけて保存ではOKですが、上書き保存ではエラーが出ます。
> 教えてください。
>
> ずいぶん時間をかけて実装してみたのですが、ヒントがあればよろしく。

上書き保存でエラーとなる理由はわからないのですが、TStringListのインスタンスを作ってそこに読み込み、TEditorのSelTextプロパティに代入するのが簡単だと思いますよ。(BCBでごめんなさい)

TStringList *sl = new TStringList();
sl->LoadFromFile(FileName);
Editor1->SelText = sl->Text;
delete sl;



2171 insertについて コメント数:  6件
  atzun   | 2002/05/07 (火) 16:58
ファイルをカレット位置に読み込むのに ReadIn(fText,sLine);で一行づつ
読み込み、 Editor1.Lines.Insert(ypos,sLine); としたら、
名前をつけて保存ではOKですが、上書き保存ではエラーが出ます。
教えてください。

ずいぶん時間をかけて実装してみたのですが、ヒントがあればよろしく。




2170 Re^5: HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  0件
  Km   | 2002/05/07 (火) 00:57
 http://homepage2.nifty.com/Km/
> ベータ版を公開します。heditor.pas のみですが。
> http://compodev.at.infoseek.co.jp/arc/hedit237b.lzh
>
> SetHitSelLength メソッドだけを更新しました。

試しました。さすがにprivateバリバリで作ると私にはわからないところだらけなのですが、実行結果は順調そのものでした。性能的にも問題ないみたいです。
修正どうもでした。



2169 Re^4: HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  1件
  本田勝彦 2002/05/06 (月) 13:55
ベータ版を公開します。heditor.pas のみですが。
http://compodev.at.infoseek.co.jp/arc/hedit237b.lzh

SetHitSelLength メソッドだけを更新しました。

undo の件はもう少し時間を下さいね。> DR-X さん



2168 Re^3: HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  2件
  本田勝彦 2002/05/05 (日) 13:39
> Value := ExpandTabLength(Copy(Line, 1, L + Value)
> - ExpandTabLength(Copy(Line, 1, L));

そうだよね。やっぱりこれしか無いですよね。

private データをバシバシ使わないと辛い処理になると思いますので
なんとかしますです。



2167 Re^2: HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  3件
  Km   | 2002/05/05 (日) 11:49
> う〜む。ということは、TEditorEx はタブ文字をも検索文字列として
> 扱えるということですね?

サンプルプロジェクト実行ファイルで試してみましたけど、TEditorのSearchでも検索できますよね。

> 何とかして見たいと思います。

ありがとうございます。
自分でも以下のようにSetHitSelLengthに実装してみたのですが、一行文字列を取得する必要があるため、どうしようかなって感じです。TEditorExにはRを含む一行文字列の取得(LineString)というメソッドを作っているので、それをコピーして使いましたが、普通にLines.Strings[RowToLines(R)]とすると大きなテキスト&折り返しありの時目に見えて遅くなってしまうのです。

L := ColToChar(R, C);
//Line := LineString(R); // Rを含む一行文字列;
Line := Lines.Strings[RowToLines(R)]; // Rを含む一行文字列;
Value := ExpandTabLength(Copy(Line, 1, L + Value)
- ExpandTabLength(Copy(Line, 1, L));

CreateCaret(...



2166 Re: HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  4件
  本田勝彦 2002/05/05 (日) 09:15
う〜む。ということは、TEditorEx はタブ文字をも検索文字列として
扱えるということですね?

すげ〜。

何とかして見たいと思います。

またしてもネタぢゃ(^^;



2165 HitStyleがhsCaret時のタブを含むキャレットの長さ コメント数:  5件
  Km   | 2002/05/04 (土) 12:45
こんにちは。

TEditorのHitStyleをhsCaretとして、HitSelLengthに検索文字列の長さをセットした場合、SetHitSelLengthでタブが展開されてないため、キャレットの長さが短くなります。見た目が少し気になるくらいで、別段支障はないのですが修正する機会があればお願いします。



2164 Re^4: 要望です。 コメント数:  0件
  DR-X   | 2002/05/03 (金) 11:45
 http://homepage3.nifty.com/x-labo/
>こちらの考えでは、例えばEnterUndo、LeaveUndoで囲まれた範囲で行
>った処理を一気に戻せればいいかなぁと思ってます。

ちょっと補足なんですが、このEnterUndoとかが構造的になっていてほ
しいです。例えば、

EnterUndo;
EnterUndo;
(処理)
LeaveUndo;
(処理)
LeaveUndo;

という形でも、全体がグループ化されるとありがたいです。なぜかと
いいますとキーマクロからスクリプトを呼んだりすることもあるから
です。

無理言ってすいません。m(_ _)m



2163 Re^4: 行追加のスピード コメント数:  0件
  snowman   | 2002/05/02 (木) 23:55
行追加スピードの確認を行いました。
通常は30程度ですが遅くなると280程度まで跳ね上がります。
(celeron366 windows98 second edition)
私のパソコンの問題かと思い会社での確認もしました。
windows95  80→530
windows98se 20→200
windowsNT4  20→20

NTだけは変化がないといった結果になりHEDITORの問題では無いようです。
windowsの問題?グラフィックカードの問題?Borland?根は深そうなので
この件は現在の所ギブアップとします。

そして、HEDITORを使用させて頂きますのでシェアレジ行ってきました。
今後とも宜しくお願いします。



2162 Re^3: 要望です。 コメント数:  1件
  DR-X   | 2002/05/02 (木) 20:25
 http://homepage3.nifty.com/x-labo/
>折角のネタを頂いたので、そういう拡張が施された TEditor を作って
>見る気持ちになっています。

ホントですか? ありがとうございます。

>Delphi がそうであるように、行単位で undo 出来るような機能をデフォ
>として、文字単位も選択可能にするためのオプションプロパティを持たせる
>
>さらに、ある時点まで一気にさかのぼる機能を持たせる。

こちらの考えでは、例えばEnterUndo、LeaveUndoで囲まれた範囲で行
った処理を一気に戻せればいいかなぁと思ってます。

たとえば全置き換えの処理を3回行ったときは、3回のUndoで元に戻
したいですよね。キーマクロなんかでもキーの再生を3回行ったとし
たら3回で戻したいです。スクリプトなんかでもユーザーが自由にロ
ックできれば便利だと思います。

そこでグループ化したい処理の時に、

EnterUndo;

(行いたい処理)

LeaveUndo;

といった形で実装できたらなと思います。

よろしくお願いします。m(_ _)m



2161 Re^2: 要望です。 コメント数:  2件
  本田勝彦 2002/05/02 (木) 17:22
折角のネタを頂いたので、そういう拡張が施された TEditor を作って
見る気持ちになっています。

Delphi がそうであるように、行単位で undo 出来るような機能をデフォ
として、文字単位も選択可能にするためのオプションプロパティを持たせる

さらに、ある時点まで一気にさかのぼる機能を持たせる。

といった仕様で良位でしょうか?




2160 Re: 要望です。 コメント数:  3件
  本田勝彦 2002/05/02 (木) 09:12
undo で一気にある時点まで戻すためには、その時点での全文字列データを保持
しておかなければなりません。
現在のシステムを利用してその機能を実現するためには、「置き換え」の
場合で言えば、undolistmax を十分な大きさに設定した上で、開始時点での
undoobj の count を記憶しておき、戻す場合は、記憶した count になるまで
undo を繰り返すという方法になると思います。

undoobj にそういうプロパティやメソッドを拡張されて見てはいかがで
しょう?



2159 Re^3: 行追加のスピード コメント数:  1件
  本田勝彦 2002/05/01 (水) 20:32
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 I, J, T: Integer;
begin
 for I := 0 to 300 do
 begin
  T := GetTickCount;
  for J := 0 to 30 do
   Editor1.Lines.Add('aaaa');
// StatusBar1.SimpleText := IntToStr(Editor1.Lines.count);
  Caption := IntToStr(Editor1.Lines.Count) + ' : ' +
        IntToStr(GetTickCount - T);
 end;
end;

で試して見ましたが、65〜85 程度の速度で推移するようです(Celelon566)
誤差の範囲内だと思いますが。



2158 要望です。 コメント数:  4件
  DR-X   | 2002/05/01 (水) 19:42
 http://homepage3.nifty.com/x-labo/
本田さん、こんにちは。DR-Xです。

最近更新が止まっちゃってますが、少し要望させて下さい。気が向い
たらで結構ですのでお願いします。

さっそくですがTEditorのUndoなんですけど、グループ化できるよう
にならないでしょうか? たとえば検索の置き換えとかキーマクロの
実行なんかで多くの変更を加えた場合、現在だとひとつひとつしか
戻すことができないですよね。これを一気に戻すことができたらな
と思います。

例えばUndoのクラスのリストに番号をもうけて、普段は順番にカウ
ントしながらいれていき、グループ化したいときはそのカウンタを
ロックするというのはどうでしょうか。そしてUndoするときには同
じ番号のものを一気に戻すというわけです。

無理をいいますが、ご検討お願いいたします。m(_ _)m




2157 Re^2: 行追加のスピード コメント数:  2件
  snowman   | 2002/05/01 (水) 00:00
早々の回答ありがとうございます。
最終的には本田さんの助言のようにする事となると思いますが、
私の説明不足がありました。
前回のサンプルプログラムを実行していただければわかると思いますが
MSゴシックの9ポイントでは
0〜2700行位 早い
2700〜5400行位 遅い
5400〜8100行位 早い と早い遅いを繰り返します。

MSゴシック14ポイントでは
0〜1700行位 早い
1700〜3400行位 遅い
3400〜5100行位 早い
5100〜6800行位 遅い と早い遅いを繰り返します。
ちょっと不思議な動作をします。 問題ないのでしょうか?



2156 Re: 行追加のスピード コメント数:  3件
  本田勝彦 2002/04/30 (火) 06:19
速度は描画速度であると言えるくらい、描画には時間がかかります。
また、追加によってスクロールが発生する場合にも余計に時間がかかります。
フォントの大きさによって速度が変化するのはこのためだと思います。
1行づつ追加している様がきちんと見えなくても良いのであれば、

Editor1.Lines.BeginUpdate;
try
 // 追加処理
finally
 Editor1.Lines.EndUpdate;
end;

とすることで、かなり速くなります。



2155 行追加のスピード コメント数:  4件
  snowman   | 2002/04/29 (月) 23:06
はじめましてsnowmanと言います。
HEDITを使わせて頂こうと考えていますが疑問が発生しました。
具体的には、連続で行を繰り返し追加したときの追加スピードが遅くなったり、
早くなったりします。

var
I: Integer;
J: Integer;
begin
for I := 0 to 300 do
begin
for J := 0 to 30 do
Editor1.Lines.Add('aaaa');
StatusBar1.SimpleText:=IntToStr(Editor1.Lines.count);
end;
end;

フォントの大きさの違いでスピードが変化する行が異なります。
HEDITの仕様なのか、確認の方法が間違っているのか、教えて頂ければと
思います。(当然、早いほうが良いのです。)



2154 Re^2: カーソル位置がずれる コメント数:  0件
  sakazuki 2002/04/19 (金) 05:48
 http://homepage2.nifty.com/sakazuki/
sakazukiです。

本田勝彦 <> wrote:
> ずれる範囲はどの程度でしょう?
一つ前のカーソル位置に表示されたままとなります。

> やっぱり、どんなコーディングか見せて頂いた方が話が早いような
> 気がします。
Caret周りの処理を追ってみたところ、原因がある程度特定出来ました。
結果。どうもTEditorの問題ではないようでした。
TDoscommandというコンポーネント内のThreadから、TEditorのRow,Colをいじる処
理を呼んでいるため、Editor1.SetFocusとやっても、FocusedがTrueとならずCaret系
の処理がされないようです。
VCLのソースをみると、FocusedはGetFocus APIをよんでおり、このAPIはThreadが違
うとどうもNULLを返すため、FocusedがFalseになるようです。

現行のやり方ではできないことが分かったので、別のタイミングでRow,Colを設定す
るような回避策を考えます。
ありがとうございました。



2153 Re: カーソル位置がずれる コメント数:  1件
  本田勝彦 2002/04/17 (水) 16:13
ずれる範囲はどの程度でしょう?
やっぱり、どんなコーディングか見せて頂いた方が話が早いような
気がします。



2152 カーソル位置がずれる コメント数:  2件
  sakazuki   | 2002/04/17 (水) 09:44
sakazukiです。
プログラムで、Linesに文字列を追加しては、キャレットを文字列最後に移動すると
いう処理をおこなっているのですが、Row,Colの値と画面に表示されるキャレットの
位置とがずれる症状が発生します。この状態の時にキーボードからキー入力を開始す
ると正しいRow,Colにキャレットが移動して普通に入力出来ます。BeginUpdate, EndU
pdate, ShowCaret, HideCaretを挟んでもこの症状は改善されません。
私のコーディングがどこかまずいのだろうと思うのですが、いったい何がおこってい
るのか思い当たる部分があれば、教えていただけませんか?
よろしくお願いします。



2151 Re: 任意の行を選択して表示したい コメント数:  0件
  Hideo Kadowaki   | 2002/04/15 (月) 22:08
こんばんは〜 TERRYさん、H-Tritonです。

>#こちらの掲示板の過去ログ用の掲示板リーダーソフトはありませんでしょうか。
> 出来ればメール形式で………

最近見つけたのですが、EdMax が正にそれですね。
今それでこのレスを書いて送信しようとしています。

H-Triton's Labo




[PR]解禁!サクラのいない直メなび:※男女タダで遊べる、大人のためのコミュ