文字の反転

解決


Pitto  2005-03-14 08:32:17  No: 88820  IP: [192.*.*.*]

一つのテキストの中で複数箇所の文字を反転できますか。文字列の長さがそれぞれ違ってもできますか。

編集 削除
ガッ  2005-03-14 09:55:13  No: 88821  IP: [192.*.*.*]

出来ます。複数箇所を探して、長さを指定して文字を反転するような関数を作れば。

編集 削除
Pitto  2005-03-14 10:45:52  No: 88822  IP: [192.*.*.*]

お世話になります。VBは始めたばかりで、学ぶことばかりです。関数も考えてみます。

編集 削除
ガッ  2005-03-14 11:08:04  No: 88823  IP: [192.*.*.*]

( ゜д゜)ハッ!
…ヒント書くの忘れてたっぽぃ(or------z
とりあえず、VB6で使う関数。
InStr()
Mid$()
Mid ステートメント
後、StrReverse$()かな?

※ヘルプ見ながらの方が断然お得で早いぞ。
  @「テキスト」というとテキストボックスコントロールに勘違いしやすいので、
  「文字列」と言ったほうが吉。
  そして、文字列に関する関数は"String."で出てくると思われ。
  …VB6だけどね(ぇ

編集 削除
じゃんぬねっと  URL  2005-03-14 11:40:12  No: 88824  IP: [192.*.*.*]

こんにちは、じゃんぬねっと です。

# ガッさん、その節はどーもです。m(_ _)m

ところで、
  「複数箇所」
というのが気になりなって仕方ありません...。

編集 削除
LESIA  2005-03-14 12:09:01  No: 88825  IP: [192.*.*.*]

例えば、文字列"0123456789ABCDEFGHIJKLM"の中の、"345"と"HIJK"のように
長さの違う複数個所を反転させたいんじゃないでしょうか?

Private Sub Command1_Click()
    Debug.Print strReverseEX("0123456789ABCDEFGHIJKLM", "345", "HIJK")
End Sub

Private Function strReverseEX(strText As String, ParamArray strData()) As String
    Dim i As Integer
    
    For i = LBound(strData) To UBound(strData)
        If InStr(strText, strData(i)) > 0 Then
            strText = Replace(strText, strData(i), StrReverse(strData(i)))
        End If
    Next i
    
    strReverseEX = strText
End Function

編集 削除
Pitto  2005-03-14 12:32:56  No: 88826  IP: [192.*.*.*]

ありがとうございます。例えば、テキストである文字列をマウスでなぞれば、対応する別の文字列の位置を何らかの形、同じように反転させるか、カーサーで分かるようにしたいのですが・・・・。

編集 削除
Say  2005-03-14 12:35:57  No: 88827  IP: [192.*.*.*]

オーナードローすればできるかも。

編集 削除
LESIA  2005-03-14 13:14:33  No: 88828  IP: [192.*.*.*]

RichTextBoxなら、色を変えるとか、太字にするとか、斜体にするとか
出来そうですね。

編集 削除
ぬるぽ  2005-03-14 19:29:19  No: 88829  IP: [192.*.*.*]

VB6以前ってオーナードローできたっけ?

編集 削除
ガッ  2005-03-14 19:35:06  No: 88830  IP: [192.*.*.*]

> じゃんぬねっとさん
(・∀・)ニヤ/(  ´Д`)<ぃぇぃぇ、こちらこそ(ぉ
※本題が終了しそうなので投稿できませんですた(orz

> ぬるぽさん
出来ます。
APIを駆使すれば、出来ますたらしいです。
やったことがありませんが(orz

編集 削除
Say  2005-03-14 21:46:29  No: 88831  IP: [192.*.*.*]

駆使というほどではありません。
手順的にはサブクラス化してWM_DRAWITEMを拾って
自前の描画処理を呼ぶだけです。

この「自前の描画処理」がコントロールや描画内容によっては
結構面倒だったりしますが。

興味あるなら、
み〜くんパパの仕事部屋にサンプルあったような。

編集 削除
Pitto  2005-03-16 19:07:56  No: 88832  IP: [192.*.*.*]

ありがとうございました。別件ですが、テキストボックスで開いたテキストを検索するとText1.SelStartとText1.SelLengthで文字を反転できましたが、リッチテキストボックスで開いたテキストで検索したら文字が反転できなくなりました。RichTextBox1.SelStartとRichTextBox1.SelLengthではダメなのでしょうか。
宜しくお願いします。

編集 削除
Pitto  2005-03-17 12:30:01  No: 88833  IP: [192.*.*.*]

解決しました。

編集 削除