Mag jemand helfen?
peter
PS: Warum hat mir eigentlich keiner gesagt, das diese NG umgezogen ist,
ts.ts.ts. :-)
Edit1.SetFocus;
Edit1.SelStart:=2;
Edit1.SelLength:=0;
setzt den Cursor hinter das zweite Zeichen
> PS: Warum hat mir eigentlich keiner gesagt, das diese NG umgezogen ist,
> ts.ts.ts. :-)
Hast du gefragt? ;-/
-Michael
>Ich füge einen Text ein und möchte, das der Cursor genau vor diesem Text
>steht. (die Position ist bekannt)
Dann mit
Edit1.SelStart:= Position;
>PS: Warum hat mir eigentlich keiner gesagt, das diese NG umgezogen ist,
>ts.ts.ts. :-)
Wir wollten Dich nicht auf der Party haben ;-)))
Bis denne dann .... Eisi
--
Ich bedaure ein Mensch zu sein. Es macht es mir
vollkommen unmöglich, das gesamte Ausmaß der
menschlichen Dummheit zu erkennen.
S.B.
>folgendes Probelm: Wie kann ich die CursorPosition in einer TEdit setzen
>?
>Ich füge einen Text ein und möchte, das der Cursor genau vor diesem Text
>steht. (die Position ist bekannt)
Edit1.SelStart := 0;
Edit1.SelLength := 0;
Tschau, Tobias
Ja das klappt schon, nur dann ist ja der Text nicht mehr markiert.
Kann man nicht "einfach" die Cursorposition setzen, unabhängig von
Selections?
peter
>Ja das klappt schon, nur dann ist ja der Text nicht mehr markiert.
>Kann man nicht "einfach" die Cursorposition setzen, unabhängig von
>Selections?
Nein. Setze die Selektion anschließend neu.
Simon
--
Homepage: http://pics.webset.de
Delphi-FAQ: http://pics.webset.de/faq.htm
Delphi-Komponenten: http://pics.webset.de/compon.htm
Infos für NG-Neulinge: http://pics.webset.de/download/misc/dcld.txt
Vor dem Einfügen SelStart und SelLength merken, SelStart auf gewünschte
Position setzen, SelLength auf 0, Text einfügen, überlegen, ob sich
dadurch Start und Länge der Markierung ändern (!), wieder setzen.
-Michael
Dann ist der Cursor wieder am Ende der Selektion.
Irgendwie drehe ich mich im Kreis: Entweder ist der Cursor richtig
gesetzt _oder_ die Selektion stimmt. Beides klappt nicht.
peter
Wie schon geschrieben:
Irgendwie drehe ich mich im Kreis: Entweder ist der Cursor richtig
gesetzt _oder_ die Selektion stimmt. Beides klappt nicht.
Bei dir ist jetzt zwar der Cursor an der richtigen Stelle, aber wieder
der Selectete Text futsch, den wenn ich ich SetStart und -Length ändere,
geht die Selection flöten!!
Ich nutzte D4. Klappts nur in D5 ?
peter
1. Edit1 Eingabe (z.b. Hallo) durch User
-> Der Cursor steht hinter dem o
2. Drücken eines Buttons oder was auch immer
3. der eingegebene Text wird erweitert um einen Beliebigen Text (z.b.
abc)
4. Es erschein Halloabc, abc sind markiert, er Cursor steht zwischen o
und a
Wers schaft, dem gebührt Ehre und Anstand.
Danke und CUall
Peter
Peter Kruse schrieb am 01 Dez 1999:
>1. Edit1 Eingabe (z.b. Hallo) durch User
>-> Der Cursor steht hinter dem o
>
>2. Drücken eines Buttons oder was auch immer
>
>3. der eingegebene Text wird erweitert um einen Beliebigen
>Text (z.b. abc)
>
>4. Es erschein Halloabc, abc sind markiert, er Cursor steht
>zwischen o und a
>
>Wers schaft, dem gebührt Ehre und Anstand.
procedure TForm1.Button1Click(Sender: TObject);
var
S2: String;
I: Integer;
KS: TKeyBoardState; // Typ heißt in Delphi 3 anders
begin
S2:= 'abc';
// Text anhängen
Edit1.Text:= Edit1.Text + S2;
// Cursor ans Ende
Edit1.SetFocus;
Edit1.SelStart:=Length(Edit1.Text);
// Shift-Taste drücken
GetKeyboardState(KS);
KS[VK_SHIFT]:=$FF;
SetKeyboardState(KS);
// Cursor nach links
for I:= 1 to Length(S2) do
begin
Edit1.Perform(WM_KEYDOWN, VK_LEFT,0);
Edit1.Perform(WM_KEYUP, VK_LEFT,0);
end;
// Shift-Taste loslassen
KS[VK_SHIFT]:=0;
SetKeyboardState(KS);
end;
Ist zwar nicht die feine Englische, aber es funktioniert. Auf
Ehre und Anstand bin ich sowieso nicht aus... :P
Dieser Kode fügt den neuen Text immer am Ende ein. Wenn der
Text auch in der Mitte des Textes eingefügt werden können soll
(wow), sind noch einige zusätzliche Berechnungen nötig.
Die Grundidee besteht darin, Aktionen eines Anwenders zu
simulieren.
Traubensaft gibt Traubenkraft
Christian "NineBerry" Schwarz
Peter Kruse schrieb am 01 Dez 1999:
>Irgendwie drehe ich mich im Kreis: Entweder ist der Cursor
>richtig gesetzt _oder_ die Selektion stimmt. Beides klappt
>nicht.
Das ist nun mal das Standardverhalten von Windows
-Texteingabecontrols.
Wenn du mal unter deinen Windows-Programmen eine Umfrage
durchführts, wirst du sehen, dass sich alle so verhalten,
selbst WordPad, Word, ...
Das einzige Windows-Programm, das ich kenne, bei dem es
vorkommen kann, dass der Cursor mal nicht am Anfang oder Ende
des markierten Textes steht, ist eben der Delphi-Editor, und
der auch dann nur, wenn die Einstellung "Persistente Blöcke"
aktiviert ist.
Bedeutet: Mit Standard-Controls kannst du dieses Verhalten
nicht imitieren. Du müsstest dir schon eine eigene Komponente
basteln, die sich Anfang und Ende von Markierungen selbst
merkt und das Zeichnen der Markierung auch selbst übernimmt.
> Ist zwar nicht die feine Englische, aber es funktioniert. Auf
> Ehre und Anstand bin ich sowieso nicht aus... :P
>
> Dieser Kode fügt den neuen Text immer am Ende ein. Wenn der
> Text auch in der Mitte des Textes eingefügt werden können soll
> (wow), sind noch einige zusätzliche Berechnungen nötig.
>
> Die Grundidee besteht darin, Aktionen eines Anwenders zu
> simulieren.
Und was passiert bei einem längeren Text, wenn dabei das Fenster den
Fokus verliert?
Bye, Udo
--
Simon's FAQ http://pics.webset.de/faq.htm
HowTo dcld* http://pics.webset.de/download/misc/dcld.txt
Udo Nesshoever schrieb am 02 Dez 1999:
>Und was passiert bei einem längeren Text, wenn dabei das
>Fenster den Fokus verliert?
Dasselbe. TControl.Perform verschickt ja keine richtigen
Nachrichten, sondern das Control tut nur so, als hätte es die
Nachrichten erhalten. Auch der KeyBoardstate ist
anwendungsspezifisch, beeinflusst also andere Anwendungen
nicht. Innerhalb der eigenen Anwendung kann auch in der
Zwischenzeit der Fokus nicht wechseln, da ich ja dem Programm
keine Möglichkeit gebe, von außen kommende Nachrichten
abzuarbeiten.
Trotzdem ist dieser Weg, wie ich schon schrieb, nicht die
"Feine Englische". Ich würde den Code so, wie er da steht,
nicht in einem Programm (außer vielleicht für eigene Zwecke)
verwenden.
Eine andere Möglichkeit, das gewünschte Verhalten zu
erreichen, ohne Verwaltung/Zeichnen des markierten Textes in
einer eigenen Komponente selbst zu übernehmen, sehe ich
allerdings nicht.
>Ist zwar nicht die feine Englische, aber es funktioniert. Auf
>Ehre und Anstand bin ich sowieso nicht aus... :P
Ehre dem, wem Ehre gebührt.
>Dieser Kode fügt den neuen Text immer am Ende ein. Wenn der
>Text auch in der Mitte des Textes eingefügt werden können soll
>(wow), sind noch einige zusätzliche Berechnungen nötig.
Nicht nötig.
>Die Grundidee besteht darin, Aktionen eines Anwenders zu
>simulieren.
Es Klappet.
Dank sei Ihm. Ich stehe wertem Herrn in tiefer Schuld.
Auf bald Holder Gesell
Peter
>>Irgendwie drehe ich mich im Kreis: Entweder ist der Cursor
>>richtig gesetzt _oder_ die Selektion stimmt. Beides klappt
>>nicht.
>
>Das ist nun mal das Standardverhalten von Windows
>-Texteingabecontrols.
>Wenn du mal unter deinen Windows-Programmen eine Umfrage
>durchführts, wirst du sehen, dass sich alle so verhalten,
>selbst WordPad, Word, ...
Netscape Adressleiste nicht. Dies Verhalten will ich nachahmen.
>Bedeutet: Mit Standard-Controls kannst du dieses Verhalten
>nicht imitieren. Du müsstest dir schon eine eigene Komponente
>basteln, die sich Anfang und Ende von Markierungen selbst
>merkt und das Zeichnen der Markierung auch selbst übernimmt.
Hat einer heiße conections zu Netscape, der mir da mal 'ne Komponente
besorgen kann?
Peter
Peter Kruse schrieb am 02 Dez 1999:
>Netscape Adressleiste nicht. Dies Verhalten will ich
>nachahmen.
Hmmm, ich hab mir das eben mal angeschaut. Ich habe NS
Communicator 4.7, also die neueste Version, und die tut nicht,
was du behauptest. Gebe ich z.B. "www.bo" ein, so
vervollständigt Netscape die Adresse zu "www.borland.com". Das
"rland.com" ist markiert. Wenn du genau hinschaust, siehst du,
dass der Cursor aber nicht vor dem 'r' steht, sondern ganz am
Ende hinter dem 'm'. Allerdings wird durch jede weitere
Tastatureingabe der markierte Text ja überschrieben, so dass
der Eindruck entstehen könnte, der Cursor würde mitten im Wort
stehen. Ist aber nicht so !!!