VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/03/23(Wed) 23:05
投稿者kuro3
Eメール
URL
タイトルRe: 必要条件(どうしても譲れない)は

花ちゃんさんへ
返信ありがとうございます。
> 私はチラツキではなく処理が早いので流れる感じだと思っておりますが。
そうですか・・・、当方WIN2KとVB6の環境なのですが、
RichTextBox1.SelStart = 2147483647
↑の処理を行った瞬間カレットは、リッチテキストボックス内の
一番下に移動し、(スクロールバーも一番したにスクロールされます。)次に、
RichTextBox1.Text = Right$(RichTextBox1.Text & "あ" + vbCrLf, n) 
の処理を行った瞬間カレットは、リッチテキストボックス内の
一番上に移動する(スクロールバーも一番したにスクロールされます。)と、
いった現象となっております。
その結果、スクロールバーが一番上と下をいききしてちらついておりました。


> 少し多めに設定しておいて、受信完了後希望の行数に設定すればいいのでは
> 受信中の行数はどうせ解らないし影響があるとは思えませんが?
実は受信文字については、一行あたり改行コードを除くと、
最小で0文字
最大は無制限(ただし基本的に50〜100文字程度)
と、ばらつきが大変多い状況なんです・・・。
そこで、行数単位での処理を行いたいと考えました。

> > ただ、確かに文字での処理をしたほうが早いという印象を受けました。
> ファイルサイズが大きくなれば処理速度が極端に落ちるようでこのままでは
> 使えないかと思います。
> (500行と10000行ではまったく動作が違ってきますから)
ご指摘のとおりです。
現状500行ですら悩んでいる状態で10000行単位での同等処理は、
厳しいとは悟りはじめました。

> > ちらつきに関しましては、実際にはスクロールバーがすごい勢いで動きまして、
> > 画面も流れている感じにならないのです。
> 同じ文字を表示しているせいですね。
文頭のほうで書かせていただいたような現象で、当方の環境では、
スクロールバーおよびカレットが上下を行き来することで、
ちらついてみえました。

> 1行当たり受信文字数はどの位でしょうか? 半角だけでしょうか?
改行コードを除いて
最小で0文字
最大は無制限(ただし基本的に50〜100文字程度)
と、なっており、受信文字は半角限定です。
ただし、送信時には全角も使用しておりまして、そのために、
リッチテキストボックス内の状態としては、全角/半角交じりとなっております。

> 大よそのファイルサイズはどの位でしょうか? この辺が大きく影響してきますので。
一行の文字数が、違いすぎて明確な解答はできないのですが、多い場合で、
50文字×行数(今は500行)くらいと思います。
(実際に、全角を送信をする機会は少ないので文字数としては無視してよいと
 考えております。)

> 510行以上に位になったら500行にカットするといった方法でもいいのでしょうか?
よいです。(が、品格的にどちらかというと501→500行がのぞましいと考えてます。)

> その他、譲れない条件を書いて頂かないと・・・・・・・。
すみません。
一度まとめて、記事No.2544に返信という形で追記するようにいたします。

> Timer1.Interval はどの位に設定されているのでしょうか?
現状は10msecとしております。

> 処理が遅れた場合データの取りこぼしはおこらないのでしょうか?
現状は、500行ではないです。
最初の記事で記載させていただいた処理の
  B.リッチテキストボックスの先頭から、削る必要がある分だけ、
    instrを用い改行コードの位置を検索
  C.Bで検索した改行コードの位置をもとにRightコマンドで、
    500行分の文字列を作成
  D.Cで作った文字列をリッチテキストボックスに貼り付け
ここのあたりの処理でもたつき、表示が遅くなりますが・・・。
理論的な話ですと、データを取りこぼしについては発生します。
ただし、別途通信分でチェックしワーニング処理を行います。
(基本的に、取りこぼしは起きないようにしたいと思っております。)

> 1回の受信は1行分なのでしょうか? どの時点で改行がはいるのでしょうか?
両方の解答となりますが、特に決まっておりません。
タイマーでポーリングしたタイミング次第となっております。

> 限定できる条件等は書いていただいた方がより早い方法が出てくるかも知れません。
了解しました。

> たとえば、新しいデータを先頭行に書き込み最後の行を削除するような方法でも
> いいとか(これですと処理が早く無駄の動きが少ないのでチラツキも少ないかと)
みずらくなるので、避けたいと考えております。

> どうせ受信中は編集できないのだから受信はテキストボックスでして受信終了後
> 必要な行数をリッチテキスト移すのではだめでしょうか?
実は受信中も編集できるようにしてました・・・。
(即時処理というわけではないですが、キー入力を受け付けて文字を相手がたに
 送信して、そのログはリッチテキストボックスに表示されるようにしております。)


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -