![]() |
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 |
Re: Fokus enthalten im Editfeld enthalten?
Frag doch einfach CanFocus ab (Näheres dazu in der OH).
|
DP-Maintenance
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
TEdit -> VCL |
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? |
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.
|
Re: Fokus enthalten im Editfeld enthalten?
Stimmt, vielleicht sollte erst
nach der kompo gesucht werden und dann abgefragt... |
Re: Fokus enthalten im Editfeld enthalten?
Zitat:
Nun wollte ich es so schreiben:
Code:
Aber damit das übersetzt werden kann muss ich Edit.Text in boolean umwandeln. Wie mache ich das?
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; |
Re: Fokus enthalten im Editfeld enthalten?
doppelpost
|
Re: Fokus enthalten im Editfeld enthalten?
Zitat:
|
Re: Fokus enthalten im Editfeld enthalten?
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt bekomme ich immer eine Fehlermeldung, wenn ich das Programm compiliere :(
|
Re: Fokus enthalten im Editfeld enthalten?
Zeig nochmal den aktuellen Code.
|
Re: Fokus enthalten im Editfeld enthalten?
Code:
Es liegt also am edit.clear wie ich festgestellt habe.
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. 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? |
Re: Fokus enthalten im Editfeld enthalten?
Muss ich da vllt eine extra procedure für das Edit.clear erstellen?
|
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