Sendkeys {Enter} an RichTextBox geht nicht!

Hallo !

Habe eine RichTextBox und Image1(1 to 40) in form von Tasten auf einer Form (Als Simulation eines CNC Bedienfeldes)

In einem Array sind die Sendkeys als String hinterlegt (stammen aus einer Datei)

Taste(1) = „A“

Taste(30) = „{BACKSPACE}“

Taste(39) = „{ENTER}“

Der Fokus liegt auf der RichTextBox und die Abfrage erfolgt über:

Private Sub Image1_Click(Index As Integer)
SendKeys Taste(Index)
End Sub

Die gesamte „Tastatur“ wird korreckt übernommen nur nicht das {ENTER}

kennt vieleicht jemand die Lösung für dieses Problem???

Mfg Stefan

Hallo,

Private Sub Image1_Click(Index As Integer)
SendKeys Taste(Index)
End Sub

Die gesamte „Tastatur“ wird korreckt übernommen nur nicht das
{ENTER}

kennt vieleicht jemand die Lösung für dieses Problem???

in dem Moment verliert Deine Richtextbox durch den Klick den Focus.
Schreib mal vor Sendkeys ein Setfocus und ein Doevents, dann wird es gehen.

Gruß, Rainer

Hallo Stefan,

wie Rainer schon schrieb, verliert die Textbox den Focus!
Sendkeys selbst sendet die Daten an das Aktive Fenster und dort an das aktive Control. Rainer sein Vorschlag sollte klappen!
Dennoch ist diese Variante sehr störanfaellig! Was ist wenn du den Button ( Ein Bild anklickst) und genau in dem Moment bekommt ein anderes Prog den Focus? Dann schlegt auch das fehl :frowning:

Somal mich jetzt die Frage stellt. Man klickst Bsp. auf das „A“ dann würde in der Richtextbox das A erscheinen. Wartum machst du es dann so umstaendlich? Trage den Buchstaben dann doch gleich in die Richtextbox ein.

MfG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Alex,

ich denke, es soll mit der Maus ein Text geschrieben werden. Bildschirmtastatur, mit der Maus zu bedienen …

Gruß, Rainer

Hallo Rainer,

ein klarer Fall von Missverstehen *gg*
Ich meinte es so.

Als erstes würde ich das Array auf den Haufen schmeissen! Wozu?
Einfach von jedem Bild die TAG Eigenschaft nutzen! Dort das Zeichen zuweisen (den Ascii Code)!

Nun klickt man ein Bild an! Das Click Ereignis wird ausgelöst. Da es sicherlich ein Steuerelement Array ist, wird immer ein und das selbe ereignis aufgerufen.
Dort schreibst dann halt einfach, wenn sich die Richtextbox ( RTF BOX) RTF nennt folgendes. RTF.Text=RTF.Text & chr(Picture1(index).Tag)

'Demo
'Richtextbox drauf genannt RTF
'Picture1 also Steuerelement Array ( 9 Stück ( 0 bis 8)
'Eigenschaft der Pictureboxen AutoRedraw auf True

Option Explicit

Private Sub Form\_Load()
Dim i% 'I als Integer
For i = 0 To 7 'Bild 0 bis 7 
 Picture1(i).Tag = 65 + i 'Ascii Code Zuweisen der Taste
 Picture1(i).Print Chr(65 + i) 'Taste beschriften
Next i
 Picture1(8).Tag = 13 'Enter als ASCII Code zuweisen
 Picture1(8).Print "Enter" 'Enter als Beschriftung zuweisen
End Sub

Private Sub Picture1\_Click(Index As Integer)
 RTF.Text = RTF.Text & Chr(Picture1(Index).Tag) 'Test zuweisen 
End Sub

'Fertig

MfG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Alex,

ja klar, sorry. :smile: Sieh Dir mal die Zeit an, die an meinem Beitrag steht … ich hab Urlaub, das war wohl schon nach dem dritten Bier. :smile: Gut, daß Du mir so etwas nicht übel nimmst. Du hast natürlich völlig recht, Sendkeys ist da überflüssig.

Gruß, Rainer

Also erst mal danke für eure Hilfe!

Die Übergabe der Tag Eigenschaft an die RTF Box ist leider mit noch mehr Problemen versehen da ich eine Tastatur mit insgesamt 4 Belegungen habe dachte ich es ist einfacher die Daten in ein Variablenfeld zu legen als alle 4 Belegungen separat im Quelltext zu hinterlegen.

Tastatur.dat Aufbau

Index Belegung1 Belegung2 Belegung3 Belegung4
1 „7“ „A“ @Ende @Editein
2 „8“ „B“ @Neu @Editaus

39 {ENTER} {ENTER} @Ende {BACKSPACE}

in Abhängigkeit der eingetragenen Werte ändert sich die Bilddatei in den Image1(1-39) So wird bei aktivieren einer Belegung die kompletten Pictures durch andere ersetzt.
durch die sendkeys Eigenschaft, kann ich auch ohne großen aufwand ein enter in mitten des textes nachträglich einfügen oder mit den Pfeiltasten navigieren.
Dadurch das {Enter} nicht ging habe ich ihn durch @Enter ersetzt und benutze das @ als Informationträger um mit einer Select Case Anweisung ein sendkeys vbCrLf zu senden.
Der aufwand dieses alles mit Tageigenschaften in Quelltext zu setzen ist wahrlich zu aufwendig außerdem gibt es diese Tastatur nicht nur mit unserem ABC sondern auch Kyrillisch daher der Aufbau eines Array.

Danke für eure Hilfe

Hallo Stefan,

auch dies sollte nicht das problem sein :wink:

Nehmen wir mal folgendes an. Du hast 4 Tastatur Layouts :wink: Alles sind wie du gesagt in der Tastatur.dat hinterlegt :smile:

Nun gibt es sicherlich viele Wege um ans Ziel zu kommen.
Du koenntest zum Bsp. eine Variable declarieren die dir sagt, das oder das Layout ist aktiv oder du weisst die Tag Eigenschaft jedesmal neu zu.
Das bedeutet zum bsp:

Variante über eine Variable:
Nehmen wir an. Du hast die Taste 1. Sie kann je nach Layout 4 zeichen beinhalten. Also weisst du der Tag Eigenschaft der 1 Taste (1 Bild) die Daten wiefolgt zu

Zeichen1[Trennzeichen]Zeichen2[Trennzeichen]Zeichen3[Trennzeichen]Zeichen4

Nun hast du eine Variable. Nehmen wir mal Layout als Byte. Sie kann Wert 0 bis 3 annehmen. je nach Tastatur Layout. nun klickst du die Taste. Du liest die Tag Eigenschaft ein. Dimensionierst eine Variable als Variant. Splittest die Tag Eigenschaft und kannst nun über die Variable auf den Wert zugreifen.

Bsp.

'Layout ist die Variable zur Layout Bestimmung

Private Sub Picture1\_Click(Index as Integer)
dim a as variant
dim vData as string
a=split(Picture1(index).tag,"[Trennzeichen]")
vData=a(layout) 'hier ist nun der Wert, den du an die RTF Box senden kannst.
End Sub

Auch kannst du bei der Variante irgendein Zeichen an jede beliebige Stelle der RTF Box setzen. Schaue dir dazu mal die Selstart Eigenschaft an :smile:

Um dir den Weg der anderen Variante zu zeigen, müsste ich wissen wie du die Daten aus der Tastatur.dat ausliest. Aber ich muss ehrlich sagen das mir persoenlich der Weg den ich dir hier gerade gepostet habe, besser finde. Aber wie du es letztendlich realisierst liegt an dir :smile:

Übrigens. Anstatt Sendkeys „Taste“ zu verwenden, kannst du auch folgendes verwenden.

Deine Richtextbox nennt sich RTF

RTF.Text = RTF.TExt & Deine Taste

MfG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]