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/)
-   -   Fokus enthalten im Editfeld enthalten? (https://www.delphipraxis.net/104666-fokus-enthalten-im-editfeld-enthalten.html)

Saul 8. Dez 2007 15:27


Fokus enthalten im Editfeld enthalten?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich wollte mal fragen, wie man abfragen kann, ob das Editfeld einen Fokus erhalten kann oder nicht (siehe Bild im Anhang). Ich soll es als so programieren, wie es im Bild steht.
Normal können doch nur die Felder einen Fokus erhalten die Sichtbar sind. Somit setzt er doch den Fokus erst garnicht, wenn das Feld nicht sichtbar ist. Daraus schließe ich eigentlich, das man gar nicht abfragen muss, ob das Feld einen Fokus erhalten kann oder nicht.
Also irgendwie verwirrt mich das bild :(
Gruß Saul

DeddyH 8. Dez 2007 15:31

Re: Fokus enthalten im Editfeld enthalten?
 
Frag doch einfach CanFocus ab (Näheres dazu in der OH).

DP-Maintenance 8. Dez 2007 17:45

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
TEdit -> VCL

Privateer3000 8. Dez 2007 19:21

Re: Fokus enthalten im Editfeld enthalten?
 
Vielleicht liegt ja das Problem wo anders,
ich vermute dass du vielleicht im Formcreate
versuchst den fokus zu setzen.Was der Compiler ablehnt.

Liege ich da richtig?

DeddyH 8. Dez 2007 19:23

Re: Fokus enthalten im Editfeld enthalten?
 
Ich habe das so verstanden, dass er sich wundert, dass in der Aufgabenstellung steht, er müsse abfragen, ob das Edit den Fokus erhalten kann. Das kann es eben nicht, wenn es nicht enabled und sichtbar ist.

Privateer3000 8. Dez 2007 20:10

Re: Fokus enthalten im Editfeld enthalten?
 
Stimmt, vielleicht sollte erst
nach der kompo gesucht werden und dann abgefragt...

Saul 9. Dez 2007 00:06

Re: Fokus enthalten im Editfeld enthalten?
 
Zitat:

Zitat von DeddyH
Ich habe das so verstanden, dass er sich wundert, dass in der Aufgabenstellung steht, er müsse abfragen, ob das Edit den Fokus erhalten kann. Das kann es eben nicht, wenn es nicht enabled und sichtbar ist.

Ja genau so meinte ich es. Ich hatte aber keine Ahnung, das die funktion CanFocus existiert. Danke für den Hinweis!!

Nun wollte ich es so schreiben:
Code:
If Edit1.CanFocus and Edit1.Text='' then Edit1.SetFocus
  else If Edit2.CanFocus and Edit2.Text='' then Edit2.SetFocus
    else If Edit3.CanFocus and Edit3.Text='' then Edit3.SetFocus
      else If Edit4.CanFocus and Edit4.Text='' then Edit4.SetFocus
        else Edit5.CanFocus and Edit5.Text='' then Edit5.SetFocus;
Aber damit das übersetzt werden kann muss ich Edit.Text in boolean umwandeln. Wie mache ich das?

Saul 9. Dez 2007 00:07

Re: Fokus enthalten im Editfeld enthalten?
 
doppelpost

Muetze1 9. Dez 2007 00:57

Re: Fokus enthalten im Editfeld enthalten?
 
Zitat:

Zitat von Saul
Aber damit das übersetzt werden kann muss ich Edit.Text in boolean umwandeln. Wie mache ich das?

Klammer einfach den Stringvergleich und füge bei Edit5 noch das fehlende "if" hinzu...

Saul 9. Dez 2007 11:20

Re: Fokus enthalten im Editfeld enthalten?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt bekomme ich immer eine Fehlermeldung, wenn ich das Programm compiliere :(

DeddyH 9. Dez 2007 11:24

Re: Fokus enthalten im Editfeld enthalten?
 
Zeig nochmal den aktuellen Code.

Saul 10. Dez 2007 15:08

Re: Fokus enthalten im Editfeld enthalten?
 
Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure EditChange(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure EditKeyPress(Sender: TObject; var Key: Char);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  iE: Integer;
  Ergebnis, Summe: String;

implementation

{$R *.dfm}


  procedure TForm1.Button1Click(Sender: TObject);
  var i1, i2: Integer;
  begin
    Edit2.Text:=IntToStr(random(9999));
    Edit3.Text:=IntToStr(random(9999));

    i1:= Length(Edit2.Text);
      If i1 = 3 then Edit2.Text:= '0' + Edit2.Text;
      If i1 = 2 then Edit2.Text:= '00' + Edit2.Text;
      If i1 = 1 then Edit2.Text:= '000' + Edit2.Text;

    i2:= Length(Edit3.Text);
      If i2 = 3 then Edit3.Text:= '0' + Edit3.Text;
      If i2 = 2 then Edit3.Text:= '00' + Edit3.Text;
      If i2 = 1 then Edit3.Text:= '000' + Edit3.Text;

    Edit4.Clear; Edit5.Clear; Edit6.Clear; Edit7.Clear; Edit8.Clear;

    Ergebnis:= IntToStr(StrToInt(Edit2.Text) + StrToInt(Edit3.Text));
    iE:= Length(Ergebnis);
    case iE of
      1: begin
           Edit5.Visible:= False;
           Edit6.Visible:= False;
           Edit7.Visible:= False;
           Edit8.Visible:= False;
           //Summe:= Edit4.Text;
         end;
      2: begin
           Edit5.Visible:= True;
           Edit6.Visible:= False;
           Edit7.Visible:= False;
           Edit8.Visible:= False;
          //Summe:= Edit4.Text + Edit5.Text;
         end;
      3: begin
           Edit5.Visible:= True;
           Edit6.Visible:= True;
           Edit7.Visible:= False;
           Edit8.Visible:= False;
           //Summe:= Edit4.Text + Edit5.Text + Edit6.Text;
         end;
      4: begin
           Edit5.Visible:= True;
           Edit6.Visible:= True;
           Edit7.Visible:= True;
           Edit8.Visible:= False;
           //Summe:= Edit4.Text + Edit5.Text + Edit6.Text + Edit7.Text;
         end;
      else begin
           Edit5.Visible:= True;
           Edit6.Visible:= True;
           Edit7.Visible:= True;
           Edit8.Visible:= True;
           //Summe:= Edit4.Text + Edit5.Text + Edit6.Text + Edit7.Text + Edit8.Text;
      end;
    end;

    Label1.Caption:= Ergebnis;
    Label3.Caption:= IntToStr(iE);
  end;





  procedure TForm1.FormCreate(Sender: TObject);
  begin
    randomize;
    //Form1.Show;
    Button1.OnClick(self);
    Button1.Enabled:= false;
    Edit1.Text:= 'falsch';
    memo1.Text:='1. Berechnen sie die Summe aus den gegebennen Summanden.' + #13#10 +
                '2. Tragen sie ihr Ergebnis in die entsprechenden Felder ein. Es folgt eine Ausgabe, ob richtig oder falsch.' + #13#10 +
                '3. Sollte ihr Ergebnis richtig sein, drücken sie auf den Button "neu" um die nächste Aufgabe zu rechnen.';
  end;





  procedure TForm1.EditChange(Sender: TObject);
  begin
   If Edit4.CanFocus and (Edit4.Text='') then Edit4.SetFocus
      else If Edit5.CanFocus and (Edit5.Text='') then Edit5.SetFocus
        else If Edit6.CanFocus and (Edit6.Text='') then Edit6.SetFocus
          else If Edit7.CanFocus and (Edit7.Text='') then Edit7.SetFocus
            else If Edit8.CanFocus and (Edit8.Text='') then Edit8.SetFocus;  

    case iE of
      1: Summe:= Edit4.Text;
      2: Summe:= Edit5.Text + Edit4.Text;
      3: Summe:= Edit6.Text + Edit5.Text + Edit4.Text;
      4: Summe:= Edit7.Text + Edit6.Text + Edit5.Text + Edit4.Text;
      else Summe:= Edit8.Text + Edit7.Text + Edit6.Text + Edit5.Text + Edit4.Text;
    end;

    If Ergebnis = Summe
    then begin
        Button1.Enabled:= True;
        Edit1.Text:= 'richtig';
    end
    else
    begin
        Button1.Enabled:= false;
        Edit1.Text:= 'falsch';
    end;

    Label2.Caption:= Summe;
  end;



  // Erlaubt nur das Drücken der Ziffern-Tasten, der Kommataste und der Backspacetaste

  procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
  begin
    if not( (key) in ['0'..'9', #8] )
    then begin
        key:=#0;
    end
  end;



  // Aboutbox

  procedure TForm1.Button2Click(Sender: TObject);
  begin
    AboutBox.ShowModal;
  end;

end.
Es liegt also am edit.clear wie ich festgestellt habe.
Im ButtonClick: Edit4.Clear; Edit5.Clear; Edit6.Clear; Edit7.Clear; Edit8.Clear;

Ich rufe den Buttonclick im FormCreate durch "Button1.OnClick(self);" auf

Aber warum gibt er da die fehlermeldung aus (Screenshot weiter oben) und wie kann ich es verhindern außer die Felder nicht zu leeren?

Saul 10. Dez 2007 17:45

Re: Fokus enthalten im Editfeld enthalten?
 
Muss ich da vllt eine extra procedure für das Edit.clear erstellen?

Privateer3000 13. Dez 2007 12:31

Re: Fokus enthalten im Editfeld enthalten?
 
siehe mein erstes posting
wenn die Buttons erst kreiert werden
kannst du kein fokus setzen. benutze findcomponent!


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