| 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 | ||