[Entf]-Taste deaktiviert. Aber warum ich hab keinen Plan und verzweifle Grad
-
Hallöle,
ich hab es irgendwie geschafft die Funktion der [Entfernen] Taste in einer Richtextbox zu deaktivieren.
Nur ich weiß nicht wie. gibt es da eine eigenschaft der Richttextbox die die Entfernen Taste verbietet oder ähnliches? das nächste Phänomen was auftritt ist, das die Taste nur die Funktion KeyUp, nicht aber KeyDown und KeyPress auslöst.
Hat da jemand ne erklärung dazu?
Ich verzweifel grad den ganzen morgen schon daran.
Danke
Felix
-
Hallo
void __fastcall TForm1::RichEdit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == VK_DELETE) Key = '\0'; }bis bald
akari
-
Entschuldige das ich da net gleich durchblicke aber was macht der Code bzw. bei mir mach er gar nichts weil die KeyDown-Funktion gar net angesprungen wird?
-
Hallo
Im OnKeyDown-Eventz des RichEdits wird der Parameter Key überprüft, ob er der dem Keycode der Entfernen-Taste entspricht. Ist das der Fall, wird Key zu den Binärwert 0 gesetzt, was gleichbedeutend mit Keine Taste ist.
Da Key eine Referenz ist, wird also die 0 zurückgegeben und alle folgenden Verarbeiten des Tastendrucks abgebrochen./Edit : Bei mir läuft das schon. Mach ein leeres neues Projekt mit einem RichEdit auf, erstelle über den OI den OnKeyDown-Event für das RichEdit und kopier die eine Zeile aus meinem Code rein.
bis bald
akari
-
OK du hast mich falsch verstanden.
Dein Code verhindert ja die Entf Taste.
Ich habe dies auch irgendwie geschafft nur ich MÖCHTE DAS NICHT(!!!). Ich will das die Entf Taste funktioniert.
Deshalb nochmal die Frage gibt es eine Eigenschaft der Richtextbox die die Entf-Taste verhindert?
MfG
Felix
-
Hallo
es gibt zwar welche für Return und Tab, aber keine für Entfernen.
Schau dir deine ganzen OnKey...-Events im ganzen Form an. Du fängst sicher irgendwo für ein anderes Control Tasten ab, und fälschlicherweise auch für das RichEdit.bis bald
akari
-
ich frag die Tasten nur ab ich ändere dann aber nichts.
vielleicht siehs du was.
void __fastcall TfrmHaupt::rftAWLKeyPress(TObject *Sender, char &Key) { int x; if ( Key==13 ) { x=frmHaupt->rftAWL->CaretPos.y; for ( int i=0;i<intFehlernummer;i++ ) { if ( intFehlerZeile[i]>x ) { intFehlerZeile[i]++; } } kontrolle(x); } } void __fastcall TfrmHaupt::rftAWLKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { int x; x=frmHaupt->rftAWL->CaretPos.y; ianzzeilen=rftAWL->Lines->Count; if ( Key==40) //Pfeil nach unten { kontrolle(x); } if ( Key==38 //Pfeil nach oben ) { x=frmHaupt->rftAWL->CaretPos.y; kontrolle(x); } if ( Key==38||Key==40 ) { frmHaupt->rftAWL->SelAttributes->Style=frmHaupt->rftAWL->SelAttributes->Style >> fsBold >> fsItalic; } if ( Key==8 ) { DelZeileStart=frmHaupt->rftAWL->CaretPos.y; } } void __fastcall TfrmHaupt::rftAWLKeyUp(TObject *Sender, WORD &Key, TShiftState Shift) { int j=0,i,intAnzZeichenAktuell3=0,intAnzZeichenAktuellZeile=0,x,y; String STZeile; frmHaupt->rftAWL->SelAttributes->Style=frmHaupt->rftAWL->SelAttributes->Style >> fsBold >> fsItalic; if ( ianzzeilen!=frmHaupt->rftAWL->Lines->Count ) { x=rftAWL->CaretPos.x; y=rftAWL->CaretPos.y; verkettete_Liste_del_all(); /* if ( y>0 ) { for ( int i=0;i<y;i++ ) { intAnzZeichenAktuellZeile += frmHaupt->rftAWL->Lines->Strings[i].Length()+2; //+2 wegen \r\n am Ende der Zeile } } */ intFehlernummer=0; //strFehler={0}; //intFehlerZeile={0}; for ( i=0;i<=frmHaupt->rftAWL->Lines->Count;i++ ) { STZeile=frmHaupt->rftAWL->Lines->Strings[i]; frmHaupt->rftAWL->SelStart=intAnzZeichenAktuell3; // Beim ersten zeichen anfangen frmHaupt->rftAWL->SelLength = STZeile.Length(); if(frmHaupt->rftAWL->SelAttributes->Color==clRed) { verkettete_Liste_write(i); /*strFehler[intFehlernummer]= frmHaupt->rftAWL->Lines->Strings[i]; intFehlerZeile[intFehlernummer]=i; intFehlernummer++; */ } intAnzZeichenAktuell3 += frmHaupt->rftAWL->Lines->Strings[i].Length()+2; //+2 wegen \r\n am Ende der Zeile */ } /* for ( i=0;i<intFehlernummer;i++ ) { if ( strFehler[i]!= frmHaupt->rftAWL->Lines->Strings[intFehlerZeile[i]] ) { for ( j=j;j<frmHaupt->rftAWL->Lines->Count;j++ ) { if ( strFehler[i]== frmHaupt->rftAWL->Lines->Strings[j] ) { intFehlerZeile[i]=j; break; } } } } */ /*frmHaupt->LBFehler->Items->Clear(); for ( i=0;i<intFehlernummer;i++ ) { frmHaupt->LBFehler->Items->Add("Syntaxfehler in Zeile: " + (String)(intFehlerZeile[i]+1) + " im Befehl: " + frmHaupt->rftAWL->Lines->Strings[intFehlerZeile[i]]); strFehler[i]=frmHaupt->rftAWL->Lines->Strings[intFehlerZeile[i]]; }*/ frmHaupt->LBFehler->Items->Clear(); pIst=pAnfang; if (pAnfang!=0) { while (pIst->pNext!=0) { frmHaupt->LBFehler->Items->Add("Syntaxfehler in Zeile: " + (String)(pIst->iZnr+1) + " im Befehl: " + pIst->Fehlertxt); pIst=pIst->pNext; } frmHaupt->LBFehler->Items->Add("Syntaxfehler in Zeile: " + (String)(pIst->iZnr+1) + " im Befehl: " + pIst->Fehlertxt); } if ( y>0 ) { intAnzZeichenAktuellZeile=0; for ( int i=0;i<y;i++ ) { intAnzZeichenAktuellZeile += frmHaupt->rftAWL->Lines->Strings[i].Length()+2; //+2 wegen \r\n am Ende der Zeile } } rftAWL->SelStart=intAnzZeichenAktuellZeile+x; frmHaupt->rftAWL->SelLength = 0; } }wenn du was siehst dan melde dich bitte, ich seh nämlich nix obwohl ich schon 2h suche
MfG Felix
-
Hallo
ich muß dich enttäuschen : ich sehe da auch nichts.
Geh mit dem Debugger schritt für schritt die Key-Events durch und schau was mit den wichtigen Werten des RichEdits passiert.bis bald
akari
-
Du verwechselst nit zufällig Backspace mit Entfernen?
Wäre es nicht schön,
- eine Ereignissroutine zu nutzen?
- die Virtuellen Tastencodes zu verwenden? http://www.marquardtnet.info/cecke/quickies.1/1_quicky_23.html
- nur eine Abfrage pro Taste (Key 38 und 40)?Man findet Fehler leichter, wenn es ein bissschen geordnet ist
-
was mich halt so stuzig macht ist das mit dem Debugger kotrolliert weder die KeyDown noch die KeyPress angesprungen wird. Hast du dafür ne erklärung?
-
- Du hast eine Release-Version die sich nicht debuggen läßt?
- Die Routinen stehen auch in den Ereignissen der Komponente?
-
Frage 1 kann ich mit nein beantworten Debuggen ist möglich.
Frage 2 kann ich mit ja beantworten. alle 3 Funktionen stehen im Objektinspektor unter EreignisseEs funktioniert ja auch für viele andere Tasten(hab fast die ganze Tastatur probiert) bloß die entf Taste will net kommen.
-
Mache doch mal ganz kurz ein nietnagelneues Projekt und probier das im OnKey dort aus.
Funktioniert die Taste überhaupt in einem Editor->defekt?
-
Odere ist vielleicht der KeyPreview im Hauptformular eingeschaltet und schon dort wird die Taste in einem Ereignis verworfen?
-
taste geht sowohl unter Word etc.
sowie in einenm niegelnagelneuen Projekt. hier kommen auch die Ereignisse
-
Dann schau nach dem KeyPreview oder durchsuche deinen ganzen Quelltext nach 12. Da du ja immer die Dezimalwerte der Tasten abgefragt hast, wird ja dann irgendwi 12 stehen müssen
-
Hallo,
hast du evtl. einen "ActionManager" eingefügt und dort der Funktion "Löschen" die Entf-Taste zugeordnet?
Hatte mal das gleiche Problem und lag bei mir eben an diesem ActionManager.Gruß
Robert
-
So ich mal wieder.
Hab die Taste immer noch nicht zum laufen gebracht. Daher jetzt mal meine Frage hat es sinn den Code mal komplett zu posten bzw. auf einen FTP zu legen, das ihr denn euch mal anschaut?
Ich kapier es einfach nicht. hab den Code von einem alten Programm kopiert. hier funktioniert ddie Taste. Dann habe ich einige wenige änderungen gemacht. die Taste geht nicht mehr. Dann hab ich alles auskommentiert was sich geändert hat. Die Taste geht immernoch nicht. Was ich net geändert habe ist die Optische Variante, aber die dürfte ja nichts dazu beitragen.
Mfg Felix
-
bzw. auf einen FTP zu legen...
Das währe das beste. Ansonsten dürfte es etwas unübersichtlich sein.
-
ok hab auf die schnelle keinen FTP gefunden. Deshalb liegt es bei GMX.
hier die Adresse
Hier geht es zum CodeHoffe ihr kommt damit klar. Das ganze ist etwas unübersichtlich auf Grund der Größe, aber vielleicht kann der eine oder andere doch behilflich sein.
Der Fehler tritt auf wenn ihr nach dem Programm Start ne neue Datei öffnet. im nun Angzeigten Editor wird die Entf Taste nicht ausgeführt.
Vielen Dank mal
Felix[url]