Deutsch
Quelltexte/ Codesnippets

Richedit Zeichen auslesen in Stringvariable

 
- Seite 1 -



RudiB.
Hallo zusammen,

ich hoffe es kann mir jemand helfen....
Ich möchte ein Zeichen aus einem Rich-Editfenster auslesen und in eine Stringvariable übertragen. Markieren/auswählen haut ja hin aber dann ??
Das ist mein Lösungsansatz, funktioniert nur nicht.
Sendmessage(Rtf&,~EM_SETSEL,6,7)'--markiert das 7.te Zeichen im Richedit-Text
test$=Sendmessage(Rtf&,~EM_GETSEL,0,0)'--hier soll das Zeichen z.B das Zeichen "s" bzw. Chr$(115) ausgelesen werden, dieses steht auch an Position 7 im Text
print test$'--Ausgabe ist "458758"
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
19.11.2021  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »


RudiB.
Hallo Georg,

Super vielen Dank...das ist die Lösung...
Declare x&,y&,y_neu&,testtext$,Richedit&,n$,Bereich#,rtf#
Dim rtf#,84
Cls
Richedit&=Create("Richedit",%hwnd,"",20,20,600,300)
Testtext$="Declare test&,satz&,anzahl&,farb_anzahl&,superanzahl&,x&,y&,z&\n\
satz&=22\n\
anzahl&=44\n\
farb_anzahl&=100\n\
anzahl&=farb_anzahl&*30\n\
superanzahl&=anzahl&\n\
...\n\
...\n\
...\n\
usw. im Listing"
SetText Richedit&,TestText$
n$="anzahl&"'--Dieser Text soll gesucht werden(Nur zum Beispiel)
DIM Bereich#,16
clear Bereich#
x&=-1
y_neu&=-1

While 1

    Long bereich#,0=x&+1
    Long bereich#,4=-1
    Long bereich#,8=Addr(n$)
    x&=Sendmessage(Richedit&,$0438,2,bereich#)'--EM_FINDTEXT (2=Flagparameter für nur ganze Wörter suchen)
    Case x&=-1:BREAK
    y&=moeglichkeit_1_instr("_",GetText$(Richedit&),y_neu&)
    Sendmessage(Richedit&,$00B1,x&,x&+Len(n$))'--Cursor setzen
    y_neu&=x&+Len(n$)

    IfNot y&=x&

        rtf_SetColor RGB(255,0,0)

    Endif

    SetFocus(Richedit&)
    'Sleep 100

EndWhile

waitinput
Dispose Bereich#
end

Proc rtf_SetColor

    Parameters a&
    Clear rtf#
    LONG rtf#,0=84
    LONG rtf#,4=$40000000
    LONG rtf#,20=a&
    sendmessage(Richedit&,1092,1,rtf#)'-EM_SETCHARFORMAT

EndProc

Proc moeglichkeit_1_instr

    Parameters such$,text$,pos&
    InStr(such$,text$,pos&)

EndProc


Deine erste Lösung mit "Instr" ist es...habs in die Schleife mit eingebaut.
PERFEKT.......manchmal sieht man den Wald vor lauter Bäumen nicht.

Großes Danke aus München
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
25.11.2021  
 




Georg
Teles
Guten Abend,

das EM_GETSEL markiert den Text sichtbar in der Edit, dazu muss man das Edit zunchst fokusieren
CLS
var rtf& = Create("RichEdit", %hWnd, "Das ist ein kleiner Test", 5, 5, 300, 300)
SetFocus(Rtf&)'erst Fokus setzen, bevor markiert wird
Sendmessage(Rtf&,$00B1,6,7)'--markiert das 7.te Zeichen im Richedit-Text
waitinput

ich habe keine Ahnung was du genau vor hast, so würde ich das lösen:
CLS
var rtf& = Create("RichEdit", %hWnd, "Das ist ein kleiner Test", 5, 5, 300, 300)
var test$ = GetText$(rtf&)
print Mid$(test$,23,1)'markiert das letzte S im Text
waitinput
END

oder umständlich:
CLS
declare test#
dim test#,100
var rtf& = Create("RichEdit", %hWnd, "Das ist ein kleiner Test", 5, 5, 300, 300)
Sendmessage(Rtf&,$000D,100,Addr(test#))
print Mid$(String$(test#,0),23,1)'markiert das letzte S im Text
DisPose test#
waitinput
END

Grüße
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

23.11.2021  
 




RudiB.
Hallo Georg,
erst mal Danke für Deine Antwort....
Nun zu meiner Problematik, habe dazu ein lauffähiges Beispiel angehängt.
Ich möchte in einem Programmlisting nach Variablen suchen...
Nun kommt in diesem Listing die Variable "anzahl&" und "farb_anzahl&" vor, ich suche nun nur nach "anzahl&" mit der Suchoption 2 für nur ganze Wörter in FINDTEXT. Hier wird aber jetzt auch das "anzahl&" in der Variable "farb_anzahl&" mit gefunden/markiert, soll aber nicht so sein.
Daher möchte ich eine Prüfung des Zeichens vor der Suchvariable durchführen.
Also: wenn Zeichen vor Suchvariable = _ (Unterstrich) dann markiere nicht.
Da hatte ich eben an ~EM_GETTEXT gedacht, kriegs aber nicht hin...
Declare x&,testtext$,Richedit&,n$,Bereich#,rtf#
Dim rtf#,84
Cls
Richedit&=Create("Richedit",%hwnd,"",20,20,600,300)
Testtext$="Declare test&,satz&,anzahl&,farb_anzahl&,superanzahl&,x&,y&,z&\n\
satz&=22\n\
anzahl&=44\n\
farb_anzahl&=100\n\
anzahl&=farb_anzahl&*30\n\
superanzahl&=anzahl&\n\
...\n\
...\n\
...\n\
usw. im Listing"
SetText Richedit&,TestText$
n$="anzahl&"'--Dieser Text soll gesucht werden(Nur zum Beispiel)
DIM Bereich#,16
clear Bereich#
x&=-1

While 1

    Long bereich#,0=x&+1
    Long bereich#,4=-1
    Long bereich#,8=Addr(n$)
    x&=Sendmessage(Richedit&,$0438,2,bereich#)'--EM_FINDTEXT (2=Flagparameter für nur ganze Wörter suchen)
    Case x&=-1:BREAK
    Sendmessage(Richedit&,$00B1,x&,x&+Len(n$))'--Cursor setzen
    rtf_SetColor RGB(255,0,0)
    SetFocus(Richedit&)
    'Sleep 100

EndWhile

SetFocus(Richedit&)
waitinput
Dispose Bereich#
end

Proc rtf_SetColor

    Parameters a&
    Clear rtf#
    LONG rtf#,0=84
    LONG rtf#,4=$40000000
    LONG rtf#,20=a&
    sendmessage(Richedit&,1092,1,rtf#)'-EM_SETCHARFORMAT

EndProc

 
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
24.11.2021  
 




Thomas
Freier
Habe mal in die Dokumentation der RTFHandling.pcu von Dieter Zornow gesehen, die auch mit EM_FINDTEXT arbeitet, aber da gäbe eine Einschränkung, dass nur die ersten 64kb durchsucht werden.
Für mehr nimmt er die EM_FINDTEXTEX .
Wenn (2=Flagparameter für nur ganze Wörter suchen) stimmt, und Wortgebilde nicht ausschließt, würde ich nicht nur bei x&=-1 aussteigen, sondern auch auf Leerzeichen, Punkt und Komma vor und nach dem Suchtext prüfen.
 
Gruß Thomas
Windows XP SP2, XProfan X2
25.11.2021  
 




RudiB.
Hallo Thomas,

zum einem besagt das "X&=-1" ja , das das Dokument bis zum Ende durchsucht wird, bzw. das Ende des Dokuments erreicht ist.
Praktisch ist das der Rückgabewert von Sendmessage bei
x&=Sendmessage(Richedit&,$0438,2,bereich#

...und bei allen anderen Zeichencodes z.B Komma,Leerzeichen etc. wird es ja auch richtig erkannt, eben nur beim Unterstrich nicht.
Das funktioniert auch bei Texten größer als 64 KB.....

Daher suche ich ja nach der Möglichkeit das Zeichen vor dem gefundenen Suchbegriff auszulesen.
Aber ~EM_GETSEL spuckt mir nur Zahlen aus .....möglicherweise Speicheradressen, doch wie lese ich die aus ??????
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
25.11.2021  
 




Georg
Teles
Guten Abend,

ich hätte da einen Ansatz - für InStr und MemPos dürften keine Zeichen ein Problem sein oder kein Problem mit allen Zeichen geben ... wenn du MemPos noch in der Schleife umsetzen kannst, kannst du auch nicht druckbare Zeichen suchen, da war ich zu faul eine Proc für dich zu schreiben :/
Declare x&,testtext$,Richedit&,n$,Bereich#,rtf#
Dim rtf#,84
Cls
Richedit&=Create("Richedit",%hwnd,"",20,20,600,300)
Testtext$="Declare test&,satz&,anzahl&,farb_anzahl&,superanzahl&,x&,y&,z&\n\
satz&=22\n\
anzahl&=44\n\
farb_anzahl&=100\n\
anzahl&=farb_anzahl&*30\n\
superanzahl&=anzahl&\n\
...\n\
...\n\
...\n\
usw. im Listing"
SetText Richedit&,TestText$
n$="anzahl&"'--Dieser Text soll gesucht werden(Nur zum Beispiel)
DIM Bereich#,16
clear Bereich#
x&=-1

While 1

    Long bereich#,0=x&+1
    Long bereich#,4=-1
    Long bereich#,8=Addr(n$)
    x&=Sendmessage(Richedit&,$0438,2,bereich#)'--EM_FINDTEXT (2=Flagparameter für nur ganze Wörter suchen)
    Case x&=-1:BREAK
    Sendmessage(Richedit&,$00B1,x&,x&+Len(n$))'--Cursor setzen
    rtf_SetColor RGB(255,0,0)
    SetFocus(Richedit&)
    'Sleep 100

EndWhile

' InStr Vorteil: lässt sich eine Schleife bilden, d.h. Position,
' ab der huier gesucht wird, beginnt bei -1 ... bei gefundenem Ergebnis kann
' zur gefudenen Position +1 dazugezählt werden und eine neue Suche gestartet werden, solange
' das Ergebnis nicht die vorherige Suchposition war
print "1. Ergebnis 1. Funktion: "+Str$(moeglichkeit_1_instr("farb_",GetText$(Richedit&),-1))
' auch gut, problematisch wirds mit der Position, diese muss immer -1 sein,
' da das MemPos nur den ersten Fund ausgibt
' das kann man vermeinden, wenn die Textvariable um ab der Gefundenen Position + Länge gekürzt wird
' und ab der Position -1 weitergesucht + die Länge und die vorherige Position des abgeschnittenen Strings hinzugezählt werden muss !
print "1. Ergebnis 2. Funktion: "+Str$(moeglichkeit_2_mempos("farb_",GetText$(Richedit&),-1))
print "-------------------------------------------------------------"
' InStr in Schleife
moeglichkeit_1_instr_schleife("farb_",GetText$(Richedit&),-1)
print "-------------------------------------------------------------"
' hier gibt es nichts zu sehen :/
moeglichkeit_2_mempos_schleife("farb_",GetText$(Richedit&),-1)
'SetFocus(Richedit&)
waitinput
Dispose Bereich#
end

Proc rtf_SetColor

    Parameters a&
    Clear rtf#
    LONG rtf#,0=84
    LONG rtf#,4=$40000000
    LONG rtf#,20=a&
    sendmessage(Richedit&,1092,1,rtf#)'-EM_SETCHARFORMAT

EndProc

Proc moeglichkeit_1_instr

    Parameters such$,text$,pos&
    InStr(such$,text$,pos&)

EndProc

Proc moeglichkeit_2_mempos

    Parameters such$,text$,pos&
    declare text#, p&
    dim text#, len(text$)
    char text#,0 = text$
    p& = MemPos(text#,pos&,such$)
    DisPose text#
    Return p&

EndProc

Proc moeglichkeit_1_instr_schleife

    Parameters such$,text$,pos&
    declare ende%, laufvar&, var&, i%
    ende% = 0
    var& = -2
    laufvar& = -2
    i% = 0

    WhileNot ende%

        var& = Str$(moeglichkeit_1_instr("farb_",GetText$(Richedit&),laufvar&))

        IfNot ((laufvar&+1) < var&)

            print "#--- keine weiteren Treffer gefunden ---#"
            break

        EndIf

        laufvar& = var&+1
        inc i%
        print Str$(i%)+". gefundene Position Schleife: "+Str$(var&)

    EndWhile

EndProc

Proc moeglichkeit_2_mempos_schleife

    Parameters such$,text$,pos&
    print "war zu faul, eine Proc zu schreiben, der Aufwand ist zu groß\nder Text muss zugeschnitten werden bis zum vorherigen treffer + Länge\ndes textes und beim nächsten Ergebniss muss diese vorherige Position + Länge\nzur neuen gefundenen Position dazugerechnet werden :/"
    Return

EndProc


Grüße
 
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

25.11.2021  
 




RudiB.
Hallo Georg,

Super vielen Dank...das ist die Lösung...
Declare x&,y&,y_neu&,testtext$,Richedit&,n$,Bereich#,rtf#
Dim rtf#,84
Cls
Richedit&=Create("Richedit",%hwnd,"",20,20,600,300)
Testtext$="Declare test&,satz&,anzahl&,farb_anzahl&,superanzahl&,x&,y&,z&\n\
satz&=22\n\
anzahl&=44\n\
farb_anzahl&=100\n\
anzahl&=farb_anzahl&*30\n\
superanzahl&=anzahl&\n\
...\n\
...\n\
...\n\
usw. im Listing"
SetText Richedit&,TestText$
n$="anzahl&"'--Dieser Text soll gesucht werden(Nur zum Beispiel)
DIM Bereich#,16
clear Bereich#
x&=-1
y_neu&=-1

While 1

    Long bereich#,0=x&+1
    Long bereich#,4=-1
    Long bereich#,8=Addr(n$)
    x&=Sendmessage(Richedit&,$0438,2,bereich#)'--EM_FINDTEXT (2=Flagparameter für nur ganze Wörter suchen)
    Case x&=-1:BREAK
    y&=moeglichkeit_1_instr("_",GetText$(Richedit&),y_neu&)
    Sendmessage(Richedit&,$00B1,x&,x&+Len(n$))'--Cursor setzen
    y_neu&=x&+Len(n$)

    IfNot y&=x&

        rtf_SetColor RGB(255,0,0)

    Endif

    SetFocus(Richedit&)
    'Sleep 100

EndWhile

waitinput
Dispose Bereich#
end

Proc rtf_SetColor

    Parameters a&
    Clear rtf#
    LONG rtf#,0=84
    LONG rtf#,4=$40000000
    LONG rtf#,20=a&
    sendmessage(Richedit&,1092,1,rtf#)'-EM_SETCHARFORMAT

EndProc

Proc moeglichkeit_1_instr

    Parameters such$,text$,pos&
    InStr(such$,text$,pos&)

EndProc


Deine erste Lösung mit "Instr" ist es...habs in die Schleife mit eingebaut.
PERFEKT.......manchmal sieht man den Wald vor lauter Bäumen nicht.

Großes Danke aus München
 
XProfan X4
Xprofan X4
Rudolf Beske / München

Hardware: NB Intel I9 - 16GByte RAM
25.11.2021  
 




Georg
Teles
Ja perfekt,

oh, ich habe aber Mist gepostet, habe überlesen, was du konkret wolltest seh heute auch den Wald vor lauter Bäumen nicht - zum Ziel hat es aber geführt hehehehehe

Grüße von der Baden-Württembergischer / Bayrischer Grenze (Ulm)
 
XProfan X2
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

25.11.2021  
 



Zum Quelltext


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.483 Betrachtungen

Unbenanntvor 0 min.
Rockford31.07.2024
Erhard Wirth14.06.2024
Sven Bader18.11.2023
Uwe Starke17.11.2023
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

RudiB. (4x)
Georg Teles (3x)
Thomas Freier (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie