Bildschirmtastatur für Touch Screen
-
also soweit komm ich:
void __fastcall TForm1::Edit1Click(TObject *Sender) { TEdit* ed = dynamic_cast<TEdit*>(Sender); if (ed) { Form2->ShowModal(); //Form2 ist das Tastaturfenster ed->Text = } }
dadurch öffnet sich schon mal bei jedem Klick auf eines der Editfelder das Tastaturfenster.
Nun muss ich ja irgendwie den Text in das Editfeld zurückschreiben. Da komm ich nicht weiter.Was ich auch umsetzen wollte ist, dass alle Captions der Tastaturbuttons beim Klick auf einen SHift-Button auf Kleinschreibung umschalten.
-
so habs nochmal probiert. Also so funktionierts schon mal. Ob das so ok ist weiss ich nicht. Hab den Close-Button rausgenommen, da eig ein OK-Button ausreicht. Nun fehlt noch die Umsetzung der Shift-Taste.
hier mein Code:
Form1:#include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Click(TObject *Sender) { TEdit* ed = dynamic_cast<TEdit*>(Sender); if (ed) { Form2->E_Text->Text = ed->Text; Form2->ShowModal(); ed->Text = Form2->E_Text->Text; } }
Form2 (Tastatur):
#pragma link "LMDCustomEdit" #pragma link "LMDCustomPanel" #pragma link "LMDEdit" #pragma resource "*.dfm" TForm2 *Form2; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::LMDButton1Click(TObject *Sender) { TButton *btn = dynamic_cast<TButton*>(Sender); if (btn) { Form2->E_Text->Text = Form2->E_Text->Text + btn->Caption; } } //--------------------------------------------------------------------------- void __fastcall TForm2::LMDButton50Click(TObject *Sender) { E_Text->Text = E_Text->Text.Delete(E_Text->Text.Length(),1); } //--------------------------------------------------------------------------- void __fastcall TForm2::LMDButton31Click(TObject *Sender) { Close(); }
-
rudpower schrieb:
Was ich auch umsetzen wollte ist, dass alle Captions der Tastaturbuttons beim Klick auf einen SHift-Button auf Kleinschreibung umschalten.
hier mal eine Variante wie man durch alle Items eines Formulars durchgeht, das mußt du dann natürlich für deine Buttons anpassen
[Edit]außerdem sind hier die AnsiString-Methoden LowerCase und UpperCase hilfreich
-
In der Klasse
TForm2
impublic
:bool IsUpper;
Beim
OnCreate
-Ereignis vonTForm2
:IsUpper=false;
Im
OnClick
-Ereignis des Shift-Buttons:TButton* btn; for(int i=0;i<ComponentCount;i++) { if(Components[i]->ClassNameIs("TButton")) { btn=dynamic_cast<TButton*>(Components[i]); if(btn->Caption.Length()==1) { if(IsUpper) btn->Caption=btn->Caption.LowerCase(); else btn->Caption=btn->Caption.UpperCase(); } } } IsUpper=!IsUpper;
Das sollte reichen. Den Rest erledigt schon die andere Routine.
-
hab das grad mal eingebunden. Leider tut sich beim Click auf den ShiftButton gar nichts. Es gibt auch keine Fehlermeldung. Sehr komisch.
Noch eine andere Frage.
Kann ich den ShiftButton irgendwie "einrasten" lassen. So dass der Benutzer sieht, dass Shift gedrückt wurde?
-
ich korriegiere. Meine Buttons sind TLMDButtons
dann konnte das auch nicht gehen.
Allerdings musste ich die Variable rausnehmen, da es so nicht funktionierte.
Voreingestellt sind alle Captions groß geschrieben. Ich möchte, dass er am besten beim Öffnen des Dokuments alles klein schreibt und bei drücken der Shifttaste auf groß wechselt. Drückt man wieder, soll wieder alles auf Groß umschalten.
-
rudpower schrieb:
Kann ich den ShiftButton irgendwie "einrasten" lassen. So dass der Benutzer sieht, dass Shift gedrückt wurde?
Wie das mit TButton funktioniert, weiss ich leider nicht. Du koenntest alternativ auch TPanel verwenden, und manuell beim
OnMouseDown
-Ereignis die EigenschaftenBevelInner
undBevelOuter
jeweils zwischenbvRaised
undbvLowered
switchen. Natuerlich muessen dann beide Werte gesetzt sein. Standardmaessig stehtBevelInner
aufbvNone
.
-
irgendwie muss es ein Wechselschalter werden. Im Moment ist es so, dass beim drücken der Shifttaste zwar alles auf Kleinschreibung wechselt. Ich möchte aber, dass man mit dem Button hin und her wechseln kann.
-
Und wie realisiert man solche Schalter? Per Boolean:
bool bSwitch=false; // ... bSwitch=!bSwitch;
-
hat sich erledigt. es funktioniert. vielen dank