Autor Beitrag
saite
Hält's aus hier
Beiträge: 15

Win 98
D7
BeitragVerfasst: Mi 20.10.04 04:17 
Hallo!

Ich habe mich jetzt zu tode gesucht und auch viel gefunden, aber nirgendwo stand was, was mein Problem betrifft:

ich habe ein TEdit , das ein onClick event besitzt und zur Laufzeit erstellt wird.
in der selben Procedure wo dieses Edit erstellt wird, wird auch mit einer lokalen variablen 'btn_weiter' ein Button erstellt.

..ich schaff es einfach nicht, dass beim Clicken auf das TEdit der Button.Enabled = false gesetzt wird...

Ich habs auf sehr viele arten probiert mit z.b.

(FindComponent('btn_weiter') as TButton).Enabled:=false; in der neuen Procedure usw..

aber nix läuft..

gibt es nicht eine möglichkeit, einfach den Button zusätzlich zum Sender mit an die Procedure zu übergeben?
z.b.
procedure TForm1.txt_change(Sender: TObject; meinButton: TButton);
und dann
OnClick:=txt_change(self,btn_weiter);
(funktioniert nicht.. hab ich schon ausprobiert...)

hier mein Ausgangscode:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure TForm1.txt_change(Sender: TObject);
begin
  if Length((Sender as TEdit).Text)>0
    then btn_weiter.Enabled:=true  //btn_weiter muss noch irgendwie übergeben werden
    else btn_weiter.Enabled:=false  //btn_weiter muss noch irgendwie übergeben werden
end;

procedure TForm1.btn_lektion_abfragenClick(Sender: TObject);
var
  en: TEdit;
  btn_weiter: TButton;
begin
  btn_weiter := TButton.Create(Form_abfrage);
  with btn_weiter do
    begin
      Parent:=Form_abfrage;
      Caption:='weiter';
      Width:=100;
      Height:=25;
      Left:=Form_abfrage.Width-btn_abfrage_beenden.Width-20;
      Top:=Form_abfrage.Height-btn_abfrage_beenden.Height-150;
      Enabled:=false;
      OnClick:=h
    end;
  en := TEdit.Create(Form_abfrage);
  with en do
    begin
      Parent:=Form_abfrage;
      Width:=200;
      MaxLength:=50;
      Height:=10;
      Left:=100;
      Top:=100;
      Font.Name:='Verdana';
      setFocus;
      OnChange:=txt_change
    end
end;


...im Endeffekt soll es nur darauf hinauslaufen, dass man nur auf weiter clicken kann, wenn was in dem TEdit steht...

bin für jede Hilfe dankbar!!!

grz
saite
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mi 20.10.04 08:51 
Hallo,

so wird das nichts. Es macht keinen Sinn das OnChange des TEdit zu nehmen. Dieses Ereigniss wird bei jeder Änderung im Editfeld abgefeuert. Was Dir eher nützen wird sind die Ereigniss OnEnter und OnExit. Diese Ereignisse werden ausgelöst, wenn ein Control den Fokus erhält bzw. verliert.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 20.10.04 08:58 
@smiegel:
Kann problematisch werden. Der Button soll ja disabled werden, wenn im Edit nichts drinsteht.
- OnEnter kann eventuell gar nicht ausgelöst werden. D.h.: Der Status des Button wird nicht gesetzt und nach Standard Enabled.
- OnExit: Wenn man mit der Maus arbeitet, kann der Button vielleicht ausgelöst werden, bevor das Ereignis abgearbeitet wird.

Ich hätte das auch im OnChange gemacht. Bei Tastatureingaben ist es auch nicht zeitkritisch und wenn man geschickt programmiert, wird der Status des Button auch nicht bei jedem Tastendruck gesetzt. Außerdem wird OnChange auch ausgelöst, wenn das Edit vom Programm mit Daten gefüttert wird.
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Mi 20.10.04 08:59 
Es gibt mehrere möglichkeiten, hier ist zb eine:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure TForm1.txt_change(Sender: TObject);  
begin  
  TButton(TEdit(Sender).Tag).Enabled:=Length(TEdit(Sender).Text)>0
end;  
 
procedure TForm1.btn_lektion_abfragenClick(Sender: TObject);  
var  
  en: TEdit;  
  btn_weiter: TButton;  
begin  
  btn_weiter := TButton.Create(Form_abfrage);  
  with btn_weiter do  
    begin  
      Parent:=Form_abfrage;  
      Caption:='weiter';  
      Width:=100;  
      Height:=25;  
      Left:=Form_abfrage.Width-btn_abfrage_beenden.Width-20;  
      Top:=Form_abfrage.Height-btn_abfrage_beenden.Height-150;  
      Enabled:=false;  
      OnClick:=h  
    end;  
  en := TEdit.Create(Form_abfrage);  
  with en do  
    begin  
      Parent:=Form_abfrage;  
      Width:=200;  
      MaxLength:=50;  
      Height:=10;  
      Left:=100;  
      Top:=100;  
      Font.Name:='Verdana';  
      setFocus;  
      OnChange:=txt_change;
      Tag:=Integer(btn_weiter);  // Der TButton wird im Tag gespeichert
    end  
end;
saite Threadstarter
Hält's aus hier
Beiträge: 15

Win 98
D7
BeitragVerfasst: Mi 20.10.04 13:30 
danke!
das mit dem tag funktioniert!
wär ich nie drauf gekommen...

danke!

saite