AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Edit: wenn gesamter Inhalt markiert ist, welche Eigenschaft?

Edit: wenn gesamter Inhalt markiert ist, welche Eigenschaft?

Ein Thema von juergen · begonnen am 7. Aug 2006 · letzter Beitrag vom 7. Aug 2006
Antwort Antwort
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#1

Edit: wenn gesamter Inhalt markiert ist, welche Eigenschaft?

  Alt 7. Aug 2006, 01:52
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

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

  Alt 7. Aug 2006, 03:19
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

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

  Alt 7. Aug 2006, 07:09
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
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 7. Aug 2006, 13:08
@Mike --> Danke! Wenn man das im Nachhinein so sieht, ist es doch ganz einfach...
@marabu:
ich würde dein Beispiel gern verstehen, insbesondere weil ich hier noch Ansätze für andere Sachen sehe
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

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

  Alt 7. Aug 2006, 13:50
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
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
 
Delphi 11 Alexandria
 
#6

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

  Alt 7. Aug 2006, 15:33
Hallo marabu,
danke!
Zitat:
Alles klar?
Mir ist einiges klarer, aber noch nicht alles.
Werde mir das aber genauer anschauen sowie ich mehr Ruhe habe.

Gruss
Jürgen
Jürgen
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#7

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

  Alt 7. Aug 2006, 15:37
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz