Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In Edit Feld künstlich einen Teil markieren (https://www.delphipraxis.net/42155-edit-feld-kuenstlich-einen-teil-markieren.html)

rainerkunze124 14. Mär 2005 18:11


In Edit Feld künstlich einen Teil markieren
 
Hab mal zwei Frage:

Kann ich in einem Edit Feld einen bestimmten Textbereich künstlich markieren lassen (wie als wenn ich ihn mit der Maus markieren würde)? So dass ich sagen kann: von der 3. Stelle an bis zur 6.? (Ihr kennt doch sicherlich das ähnliche Festure von Excel wenn es Sachen bereits kennt, dass dann der bekannte und zur Auswahl stehende Textteil markiert wird, ohne dass man ihn markiert hat)

Und wie kann ich den Cursor im Editfeld umsetzen (vom Programm her)?

Matze 14. Mär 2005 18:13

Re: In Edit Feld künstlich einen Teil markieren
 
Delphi-Referenz durchsuchenSetFocus
Delphi-Referenz durchsuchenSelStart
Delphi-Referenz durchsuchenSelLength

rainerkunze124 14. Mär 2005 18:18

Re: In Edit Feld künstlich einen Teil markieren
 
Danke für die schnelle Antwort :bounce2: , die letzten beiden Sachen hatte ich auch, aber ich wusste nicht, dass man den Focus auf das Teil setzen muss

Aber nach der Selektion möchte ich gerne den Cursor automatisch vor die Selektion packen und wenn ich dann wieder SelStart benutze, dann verschwindet die Selektion. Womit setze ich den Cursor zurück?

mr47 14. Mär 2005 18:24

Re: In Edit Feld künstlich einen Teil markieren
 
Zitat:

Zitat von rainerkunze124
Danke für die schnelle Antwort :bounce2: , die letzten beiden Sachen hatte ich auch, aber ich wusste nicht, dass man den Focus auf das Teil setzen muss

Aber nach der Selektion möchte ich gerne den Cursor automatisch vor die Selektion packen und wenn ich dann wieder SelStart benutze, dann verschwindet die Selektion. Womit setze ich den Cursor zurück?

Du willst den Coursor VOR den markierten Teil setzen? Das geht IMHO mit Selstart und SelLength nicht!


mfg

rainerkunze124 14. Mär 2005 18:32

Re: In Edit Feld künstlich einen Teil markieren
 
Zitat:

Das geht IMHO mit Selstart und SelLength nicht!
Und womit dann :?:

mr47 14. Mär 2005 18:37

Re: In Edit Feld künstlich einen Teil markieren
 
Zitat:

Zitat von rainerkunze124
Zitat:

Das geht IMHO mit Selstart und SelLength nicht!
Und womit dann :?:

Weis ich nicht! Ich habs versucht mit
Delphi-Quellcode:
selStart:=5;
selLength:=-2;
So rum gehts nicht. Man kann auch nicht erst markieren und dann den Coursor verschieben. Ansonsten fällt mir auch kein Trick mehr ein!

mfg

rainerkunze124 14. Mär 2005 18:47

Re: In Edit Feld künstlich einen Teil markieren
 
Hat sonst noch einer ne Idee :?:
Also manuell kann ich das Problem lösen, in dem ich einfach von rechts nach links markiere, aber Delphi interpretiert dieses Verhalten falsch (wie mr47 auch festgestellt hat).

mr47 14. Mär 2005 20:11

Re: In Edit Feld künstlich einen Teil markieren
 
Wozu brauchst du denn das? Vielleicht kann man ja ne Alternative / andere Lösung finden!

Stevie 15. Mär 2005 08:32

Re: In Edit Feld künstlich einen Teil markieren
 
Tja, das ist mal kein Delphi-Problem, sondern eins der API. :roll:
Die MSDN schrieb zu EM_SETSEL
The start value can be greater than the end value. The lower of the two values specifies the character position of the first character in the selection. The higher value specifies the position of the first character beyond the selection.
The start value is the anchor point of the selection, and the end value is the active end. If the user uses the SHIFT key to adjust the size of the selection, the active end can move but the anchor point remains the same.


P.S.: Ich hab da mal was gebastelt: ;-)
Delphi-Quellcode:
procedure SetSel(Edit: TEdit; Start, Stop: Integer);
var
  i: Integer;
  KeyboardState: TKeyboardState;
begin
  Edit.Perform(EM_SETSEL, Start, Start);
  GetKeyboardState(KeyboardState);
  KeyboardState[VK_SHIFT] := $80;
  SetKeyboardState(KeyboardState);
  if Start > Stop then
  for i := Start downto Succ(Stop) do
  begin
    Edit.Perform(WM_KEYDOWN, VK_LEFT, 0);
    Edit.Perform(WM_KEYUP, VK_LEFT, 0);
  end;
  if Start < Stop then
  for i := Start to Pred(Stop) do
  begin
    Edit.Perform(WM_KEYDOWN, VK_RIGHT, 0);
    Edit.Perform(WM_KEYUP, VK_RIGHT, 0);
  end;
  SetKeyboardState(KeyboardState);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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-2025 by Thomas Breitkreuz