Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zustand eines Buttons erkennen (https://www.delphipraxis.net/187007-zustand-eines-buttons-erkennen.html)

Luckner 20. Okt 2015 13:56

AW: Zustand eines Buttons erkennen
 
Das Problem ist, dass ich gerne wieder zurück in das Edit-Feld springen würde, falls Jemand doch keine Zahl eingibt. Dadurch erzeuge ich eine Schleife aus der man nicht so schnell rauskommt.

Sir Rufo 20. Okt 2015 14:02

AW: Zustand eines Buttons erkennen
 
Also mal ganz rudimentär würde ich so etwas vorschlagen:
Delphi-Quellcode:
unit Unit3;

interface

uses
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm3 = class( TForm )
    Value1Edit: TEdit; // Validate OnChange
    Value2Edit: TEdit; // Validate OnExit
    Value3Edit: TEdit; // Validate Button.OnClick
    Button1: TButton;
    Value1ErrorLabel: TLabel;
    Value2ErrorLabel: TLabel;
    Value3ErrorLabel: TLabel;
    procedure Value1EditChange( Sender: TObject );
    procedure Value2EditExit( Sender: TObject );
    procedure Button1Click( Sender: TObject );
  private
    FValue1Valid, FValue2Valid, FValue3Valid: Boolean;
    FValue1, FValue2, FValue3               : Integer;
    procedure ValidateValue1;
    procedure ValidateValue2;
    procedure ValidateValue3;
  public

  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Value1EditChange( Sender: TObject );
begin
  ValidateValue1;
end;

procedure TForm3.Value2EditExit( Sender: TObject );
begin
  ValidateValue2;
end;

procedure TForm3.Button1Click( Sender: TObject );
begin
  ValidateValue1;
  ValidateValue2;
  ValidateValue3;

  if FValue1Valid and FValue2Valid and FValue3Valid
  then
    begin

    end;
end;

procedure TForm3.ValidateValue1;
begin
  FValue1Valid := TryStrToInt( Value1Edit.Text, FValue1 );
  if FValue1Valid
  then
    Value1ErrorLabel.Caption := ''
  else
    Value1ErrorLabel.Caption := 'not a valid number';
end;

procedure TForm3.ValidateValue2;
begin
  FValue2Valid := TryStrToInt( Value2Edit.Text, FValue2 );
  if FValue2Valid
  then
    Value2ErrorLabel.Caption := ''
  else
    Value2ErrorLabel.Caption := 'not a valid number';
end;

procedure TForm3.ValidateValue3;
begin
  FValue3Valid := TryStrToInt( Value3Edit.Text, FValue3 );
  if FValue3Valid
  then
    Value3ErrorLabel.Caption := ''
  else
    Value3ErrorLabel.Caption := 'not a valid number';
end;

end.

DeddyH 20. Okt 2015 14:04

AW: Zustand eines Buttons erkennen
 
Könnte man nicht den Sender-Parameter auswerten? Oder alternativ das Edit gleich so einstellen, dass nur (ganze) Zahlen akzeptiert werden, in älteren Delphis gibt es da zwar noch keine Property für, kann man aber nachbauen.

mm1256 20. Okt 2015 14:47

AW: Zustand eines Buttons erkennen
 
Yupp...sehe ich genauso wie DeddyH. Noch dazu ist das "Nachrüsten" mit einer einzigen Zeile Quellcode passiert:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if ord(Key) > 27 then if not (Key in ['0'..'9']) then Key := #0;
end;
Und wenn ich z.B. 20 Edit's auf der Form hätte, dann weise ich das halt jedem TEdit zu. Es bleibt bei einer Zeile Code.

EDIT: Abgesehen davon finde ich persönlich (andere Programmierer mögen andere Meinungen haben) es etwa abartig, einem Anwender zuerst statt Zahlen irgendwas Anderes eingeben zu lassen, die Eingabe zu überprüfen, um ihm dann mitzuteilen, dass er Bockmist eingegeben hat.

DeddyH 20. Okt 2015 14:51

AW: Zustand eines Buttons erkennen
 
Ich hatte jetzt eher an so etwas gedacht:
Delphi-Quellcode:
procedure MakeEditNumbersOnly(TheEdit: TCustomEdit);
begin
  Assert(Assigned(TheEdit));
  SetWindowLong(TheEdit.Handle, GWL_STYLE, GetWindowLong(TheEdit.Handle, GWL_STYLE) or ES_NUMBER);
end;

Dalai 20. Okt 2015 14:53

AW: Zustand eines Buttons erkennen
 
Ich habe sowas ähnliches kürzlich umgesetzt und dabei das Ereignis OnKeyPress bemüht. Dafür hab ich ganz dreist von hier geguttenbergt.

MfG Dalai

p80286 20. Okt 2015 14:53

AW: Zustand eines Buttons erkennen
 
Zitat:

Zitat von mm1256 (Beitrag 1319208)
Yupp...sehe ich genauso wie DeddyH. Noch dazu ist das "Nachrüsten" mit einer einzigen Zeile Quellcode passiert:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if ord(Key) > 27 then if not (Key in ['0'..'9']) then Key := #0;
end;
Und wenn ich z.B. 20 Edit's auf der Form hätte, dann weise ich das halt jedem TEdit zu. Es bleibt bei einer Zeile Code.

wenn ich mich richtig erinnere fehlt da noch Return,Backspace....:angel2:
aber das Prinzip ist schon mal gut.
Wobei ich irgendwie das Gefühl habe das die Validierung zum falschen Zeitpunkt stattfindet.
Wenn nach dem onExit der Abbruch oder die Validierung stattfinden soll, wäre es nicht schlecht das auch so zu programmieren.

Gruß
K-H

mm1256 20. Okt 2015 14:57

AW: Zustand eines Buttons erkennen
 
Zitat:

Zitat von p80286 (Beitrag 1319211)
..wenn ich mich richtig erinnere fehlt da noch Return,Backspace..

Nein, fehlt nicht, weil das durch
Code:
if ord(Key) > 27
bereits erledigt wird.

Zitat:

Zitat von p80286 (Beitrag 1319211)
Wenn nach dem onExit der Abbruch oder die Validierung stattfinden soll, wäre es nicht schlecht das auch so zu programmieren.

Das ist ja die grundsätzliche Frage zur Vorgehensweise. Beim Autofahren würde man ja auch zuerst den Sicherheitsgurt anlegen (Validierung) um dann los zu fahren (Eingabe auswerten) anstelle loszufahren und wenn es gekracht hat den Gurt anlegen. Das meinte ich mit "abartig".

DeddyH 20. Okt 2015 15:01

AW: Zustand eines Buttons erkennen
 
Bei der KeyPress-Variante wird aber die Zwischenablage nicht berücksichtigt, d.h. damit bekommt man immer noch Grütze ins Edit.

Luckner 20. Okt 2015 15:17

AW: Zustand eines Buttons erkennen
 
Hallo,
habe vergessen zu erwähnen, das es sich um ein 'TJvValidateEdit' von den Jedi-Tools handelt. Die Validierung übernimmt schon dieses Tool. Das Edit-Feld darf nur nicht leer sein bzw. die Zahlen müssen in einer bestimmten Tabelle existieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
Seite 2 von 4     12 34      

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