![]() |
Textcursor
Hallo
ich habe eine Frage zu Delphi: Wie kann ich den Textcursor mit dem Timer verbinden lassen? Kurz gesagt: Ich möchte den Textcursor mit dem Timer funktionieren lassen. Danke |
Re: Textcursor
In wie fern? Wie oft er in einer Sekunde aufblickt oder wie meinst du das? Soll er jede Sekunde was schreiben???
|
Re: Textcursor
Bitte? Den Textcursor mit einem Timer verbinden? Noch einmal für nicht eingeweihte bitte ;)
Wenn du meinst, die Blinkgeschwindigkeit zu ändern: das geht mit einem Timer nicht, es sei denn du zeichnest den Cursor selbst. |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Falsche Sparte |
Re: Textcursor
Hallo
In einem Text möchte ich den Textcursor in die beiden Richtungen (VK_LEFT, VK_RİGHT) mit dem Timer verschieben lassen. Anders gesagt: Ich möchte die Rechts und Links Pfeile (VK_LEFT, VK_RİGHT) an den Timer anschließen. Danke |
Re: Textcursor
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Orhan,
du kannst die Eigenschaft SelStart eines Text-Controls manipulieren, um das Caret zu bewegen. Die angehängte Demo zeigt dir wie es geht. Grüße vom marabu |
Re: Textcursor
Hallo Marabu
Danke vielmals! Es funktioniert wunderbar. Aber ein kleines Problem habe ich nicht lösen können. İch möchte diese Funktion im RichEdit anwenden. Wie springt der Cursor im RichEdit in die nächste Zeile. Danke |
Re: Textcursor
Hallo Orhan,
bei Multiline Edit Controls gibt es eine Besonderheit: du musst über den Zeilentrenner sLineBreak (#13#10) hinweg springen, mitten hinein funktioniert nicht.
Delphi-Quellcode:
Grüße vom marabu
function TDemoForm.MoveCaret(e: TRichEdit; forth: Boolean): Boolean;
var iPos, iDelta: Integer; begin with e do begin iDelta := Ord(forth) shl 1 - 1; iPos := SelStart + iDelta; SelStart := iPos; // Sonderbehandlung von Multiline Edit Controls // nur bei forth = True notwendig if iPos <> SelStart then begin iPos := SelStart + iDelta shl 1; SelStart := iPos; end; if forth then Result := iPos < Length(Text) else Result := iPos > 0; self.Caption := Format('caret pos %d', [iPos]); end; end; |
Re: Textcursor
Hallo marabu
Herzlichen Dank für ihre Hilfe. Das war sehr nett von ihnen. Kann man zu dem Code auch so eine Funktion zufügen: Wenn der Cursor blinkt wird der Buchstabe in der Zeile (im Text) z.B. rot und wenn der Cursor nicht mehr blinkt (verschwindet) wird der Buchstabe wieder schwarz. Ist das möglich? Und wie...Bitte? Danke |
Re: Textcursor
Hallo Orhan,
das Zeichen rechts neben dem Caret rot zu färben ist kein Problem:
Delphi-Quellcode:
Der gewünschte Zusammenhang mit der Sichtbarkeit des Carets ist mir nicht ganz klar. Da gibt es auch sicherlich ein paar Randbedingungen, aber die Steuerung der Schriftfarbe geschieht grundsätzlich nach folgendem Muster:
function TDemoForm.MoveCaret(e: TRichEdit; forth: Boolean): Boolean;
var iPos, iDelta: Integer; begin with e do begin iDelta := Ord(forth) shl 1 - 1; iPos := SelStart + iDelta; // das Zeichen rechts normal (schwarz) anmalen SelLength := 1; SelAttributes.Color := Font.Color; SelLength := 0; SelStart := iPos; // Sonderbehandlung von Multiline Edit Controls // nur bei forth = True notwendig if iPos <> SelStart then begin iPos := SelStart + iDelta shl 1; SelStart := iPos; end; // das Zeichen rechts rot anmalen SelLength := 1; SelAttributes.Color := clRed; SelLength := 0; if forth then Result := iPos < Length(Text) else Result := iPos > 0; self.Caption := Format('caret pos %d', [iPos]); end; end;
Delphi-Quellcode:
Freundliche Grüße
with RichEdit do
begin SelStart := 0; // Cursor vor das erste Zeichen setzen SelLength := Length(Lines.Text); // Anzahl der Zeichen festlegen SelAttributes.Color := Font.Color; // Farbe festlegen SelLength := 0; // eventuell Markierung aufheben end; marabu |
Re: Textcursor
Hallo marabu
So habe ich es nicht gemeint. Ich habe ein Buchstaben Lernprogramm für Kinder gemacht. Es muss so funktionieren: Z.B. das Wort ''Delphi''. Wenn der Cursor vor dem Buchstaben ''D'' steht, muss dieser Buchstabe rot werden. Wenn aber der Cursor zum nächsten Buchstaben springt muss der Buchstabe ''e'' rot werden aber der vorherige Buchstabe ''D'' schwarz u.s.w. Oder ''Wenn der Cursor blinkt wird der Buchstabe z.B. rot und wenn der Cursor nicht mehr blinkt (verschwindet) wird der Buchstabe wieder schwarz.'' Die Kinder müssen merken, das die roten Buchstaben in der Zeile gelesen werden müssen. Freundliche Grüße |
Re: Textcursor
Hallo Orhan,
Zitat:
Zur generellen Funktionsweise: Würde es nicht ausreichen, wenn der jeweilige Buchstabe hervorgehoben wird? Wozu wird der automatisch bewegte Cursor denn zusätzlich gebraucht? Zitat:
Schöne Programmidee übrigens. marabu |
Re: Textcursor
ich denke auch, dass es problematisch ist, jeden einzelnen buchstaben mit der gleichen geschwindigkeit hervorzuheben.
schließlich liest man normalerweise nicht jeden buchstaben, sondern die einzelnen silben. Sprich: Eigentlich müssten silben statt buchstaben markiert werden, und die zu erkennen dürfte knifelig werden :gruebel: |
Re: Textcursor
Hallo marabu
''Was funktioniert denn bei dir nicht?'' Die Funktion funktioniert wunderbar. "Der automatisch bewegte Cursor". Weil die Kinder beim lesen immer wieder auf die rechte Pfeiltaste drücken müssen. Deswegen braucht man den automatisch bewegten Cursor. Es geht nicht um die ''Geschwindigkeit''. Sondern ich wollte die einzelnen Buchstaben den Kindern farbig verdeutlichen. Kann man nicht die Buchstaben vor dem automatisch bewegten Cursor farbig kennzeichnen? Ist das möglich? Vielen Dank für ihre Hilfe! |
Re: Textcursor
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Orhan,
vielleicht hast du es garnicht bemerkt, aber mein Code in Beitrag #10 ist schon angepasst um die Farben zu wechseln. Du musstest ihn nur noch in das Beispielprojekt an die Stelle der alten Prozedur setzen um deine roten Buchstaben aufleuchten zu sehen. Ich habe das Projekt in geänderter Form nocheinmal für dich angehängt. Grüße marabu |
Re: Textcursor
Zitat:
hast Du einen Screenshot von Deinem Programm? Kann man dieses Programm bekommen? |
Re: Textcursor
Hallo marabu
Du hast recht. Als erstes möchte ich mich bei dir entschuldigen. Ich weis nicht wie ich dir danken kann! Herzlichen Dank! :wall: :-D |
Re: Textcursor
Hallo marabu,
kannst du mir mal erklaeren was diese Zeile macht? Zitat:
Ich habe mal eben die Zeile angetestet so:
Delphi-Quellcode:
Wenn forth := True dann ist das Result = 1 wenn False dann -1. Bin aber immer noch net so ganz dahintergestiegen.
procedure TForm1.Button1Click(Sender: TObject);
Var iDelta : Integer; forth : Boolean; begin iDelta := 0; forth := False; iDelta := Ord(forth) shl 1 - 1; ShowMessage(IntToStr(iDelta)); end; |
Re: Textcursor
Hi Mackhack,
du hast es eigentlich schon herausgefunden - es handelt sich um eine Abbildungsfunktion f(False) = -1 und f(True) = 1. Ich steuere damit die Bewegung des Carets vorwärts (forth = altenglisch für forward) oder rückwärts (not forth). Grüße vom marabu |
Re: Textcursor
Danke marabu!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz