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 Edit: wenn gesamter Inhalt markiert ist, welche Eigenschaft? (https://www.delphipraxis.net/74649-edit-wenn-gesamter-inhalt-markiert-ist-welche-eigenschaft.html)

juergen 7. Aug 2006 01:52


Edit: wenn gesamter Inhalt markiert ist, welche Eigenschaft?
 
Hallo zusammen,

für ein Edit nutze ich ein OnKeyPress Event. U.a. prüfe ich, dass nur ein Komma eingegeben werden darf:
Delphi-Quellcode:
    // nur ein Komma
    if (pos(#44, string1) > 0) and (key = #44) then
      key := #0;
Wenn ich das Edit verlasse und später wieder dahin reinspringe, ist ja alles markiert.
Wenn alles markiert ist möchte ich gern, dass wenn ich dann das Komma eingebe, alles gelöscht wird und das Komma erscheint.
Das wäre ja auch Standard.
Nur erkennt mein Source von oben, dass schon ein Komma vorhanden ist und lässt die Eingabe erst gar nicht zu.

Wie kann ich denn erkennen (Eigenschaft), ob im Edit ALLES markiert ist, um dann die Eingabe des Kommas zuzulassen?

Danke schon mal vorab!

JasonDX 7. Aug 2006 03:19

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
Zitat:

Zitat von juergen
Wie kann ich denn erkennen (Eigenschaft), ob im Edit ALLES markiert ist, um dann die Eingabe des Kommas zuzulassen?

TEdit.SelLength gibt dir die Laenge des markierten Textes an. Wenn diese Laenge gleich der gesamtlaenge des Textes ist, so ist der ganze Text markiert. Ergo:
Delphi-Quellcode:
if length(Edit.Text) = Edit.SelLength then
  //Der gesamte Text ist markiert
greetz
Mike

marabu 7. Aug 2006 07:09

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
Hallo Jürgen,

die Selektion des ganzen Textes ist kein ausreichendes Kriterium. Außerdem gibt es da noch die Zwischenablage.

Delphi-Quellcode:
uses
  ClipBrd;

function Replace(const s: String; index, Count: Integer; subStr: String): String;
begin
  Result := s;
  Delete(Result, index, count);
  Insert(subStr, Result, index);
end;

procedure TDemoForm.EditKeyPress(Sender: TObject; var Key: Char);
var
  s: String;
  value: Double;
begin
  with Sender as TEdit do
  begin
    if (Key = ^V) then
      s := ClipBoard.AsText
    else if Key < ' ' then
      Exit
    else s := Key;
    s := Replace(Text, Succ(SelStart), SelLength, s);
    if (s <> '') and not TryStrToFloat(s, value) then
      Key := #0;
  end;
end;
Grüße vom marabu

juergen 7. Aug 2006 13:08

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
@Mike --> Danke! Wenn man das im Nachhinein so sieht, ist es doch ganz einfach... :zwinker:
@marabu:
ich würde dein Beispiel gern verstehen, insbesondere weil ich hier noch Ansätze für andere Sachen sehe :P
Ich hoffe ich nerve hier nun nicht zu sehr, aber was genau bedeutet:
- ^V
- was genau macht die Funktion "Replace"
- und was passiert an dieserr Stelle s := Replace(Text, Succ(SelStart), SelLength, s);

Danke marabu! :-D

marabu 7. Aug 2006 13:50

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
Hallo Jürgen,

^V ist eine Notation für Steuerzeichen (Strg+V, #22).

Replace() ist einfach eine Funktion, welche mir einen Teil-String über seine Ortsangabe (anstelle seinen Wert) durch einen anderen String ersetzt und das Ergebnis zurück gibt.

Delphi-Quellcode:
with Sender as TEdit do
  s := Replace(Text, Succ(SelStart), SelLength, s);
Mit dieser Code-Zeile wird genau der im Edit-Control selektierte Text durch den Inhalt von s ersetzt. Succ(SelStart) macht aus einem Offset (0-basiert) einen Index (1-basiert) und das Ergebnis speichere ich wieder in s, weil ich den alten Inhalt eh nicht mehr brauche.

Alles klar?

marabu

juergen 7. Aug 2006 15:33

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
Hallo marabu,
danke!
Zitat:

Alles klar?
Mir ist einiges klarer, aber noch nicht alles. :? :gruebel:
Werde mir das aber genauer anschauen sowie ich mehr Ruhe habe.

Gruss
Jürgen

JasonDX 7. Aug 2006 15:37

Re: Edit: wenn gesamter Inhalt markiert ist, welche Eigensch
 
Zitat:

Zitat von marabu
^V ist eine Notation für Steuerzeichen (Strg+V, #22).

Zu dieser Loesung wollt ich noch auf Shift+Insert bzw. Rechtsklick->Paste als Moeglichkeit zum Einfuegen des Clipboards aufmerksam machen ;)

greetz
Mike


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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