Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi einen Button Disabled setzen (https://www.delphipraxis.net/50219-einen-button-disabled-setzen.html)

cell 22. Jul 2005 07:17


einen Button Disabled setzen
 
hi ich habe jetzt in mein Programm eine Druckfunktion eingebaut, aber wenn die Form noch nicht offen ist, bzw die Daten noch nicht drinnen sind, dann sollte der button Enabled:=false; sein
Dazu habe ich mir einen Zähler eingebaut der was bei Form.Create zaehler:=zahler+1 sagt
und bei Form.Close zaehler:=zaehler-1 sagt.
Und bei Form.Activate steht folgendes:
Delphi-Quellcode:
if zaehler<>0 then
    frmmain.Drucken.Enabled:=true
else
    frmmain.Drucken.Enabled:=false;
thx 4 help

Bernhard Geyer 22. Jul 2005 07:19

Re: einen Button Disabled setzen
 
Ja und. Was ist jetzt die genaue Frage :wiejetzt:
Gehts nicht? gibts Abstürze? Wo genau hast Du zaehler definiert?

cell 22. Jul 2005 07:23

Re: einen Button Disabled setzen
 
ups sry des wichtigste hab ich vergessen :oops:
nein abstürze gibt es nicht, aber es funktioniert nicht egal ob es 0 oder 1 ist, er setzt es mir nicht diasabled
[edit]
definiert h ab ich die zahl in private

jensw_2000 22. Jul 2005 07:31

Re: einen Button Disabled setzen
 
Dein Fehler liegt nicht in der beschriebenen Codezeile. Schau mal im Debugmode welchen Wert "zaehler" zur Laufzeit hat.

Generell kannst du den Befehl auch kürzer formulieren:

Delphi-Quellcode:
  frmmain.Drucken.Enabled:= (zaehler<>0);

Schöne Grüße,
Jens

cell 22. Jul 2005 07:35

Re: einen Button Disabled setzen
 
ja das hab ich gerade gemacht und bei zaehler:=zaehler+1; ist der zaehler immer 0
weiß aber ned warum, ermüsste mir doch eines dazuzählen wenn er Form.Create aufruft oder ????

Sharky 22. Jul 2005 07:40

Re: einen Button Disabled setzen
 
Zitat:

Zitat von cell
..., aber wenn die Form noch nicht offen ist, bzw die Daten noch nicht drinnen sind, ...

Hai cell,

das verstehe ich nicht. Wenn die Form (welche auch immer das sein mag) nicht offen ist kann man den Butten doch auch nicht sehen. Ergo bringt es nichts in zu disablen.

Und was meinst Du mit "die Daten noch nich drinnen sind"? Welche Daten? Woher kommen sie?

jensw_2000 22. Jul 2005 07:43

Re: einen Button Disabled setzen
 
Hast du den Haltepunkt genau auz die Zeile "zaehler:=zaehler+1;" gesetzt ?
Falls ja sollte "0" OK sein.
Markiere mal die nächste Codezeile und schau die den Wert dann noch mal an.

Warum eigentlich "zaehler:=zaehler+1;" im FormCreate ? Erstellst du die Form zur Laufzeit ?
Falls nicht, kann Zaehler nie "0" sein nachdem alle Formulare instanziert wurden ...

cell 22. Jul 2005 07:50

Re: einen Button Disabled setzen
 
der button ist auf einer Menüleiste die in einem MDI ist deshalb kann man den button sehen. Die Daten kommen von einer Datenbank, ist aber glaube ich für die Disabled Befehl nicht von bedeutung oder ??
ja ich create die Form zur laufzeit.
hmm ich habe mir da jetzt angeschaut, und es stimmt alles, aber trodzdem ist der button am anfang nicht disabled

TeronG 22. Jul 2005 07:52

Re: einen Button Disabled setzen
 
Zähler ist 0 aber Button nicht Disable .. wann/wo frägst du denn den zähler ab?

jensw_2000 22. Jul 2005 07:54

Re: einen Button Disabled setzen
 
Steht denn dieser Code
Delphi-Quellcode:
if zaehler<>0 then
    frmmain.Drucken.Enabled:=true
else
    frmmain.Drucken.Enabled:=false;
Auch im onCreate der MDI Form ?

Dann wird der Code bein Programmstart ja jarnicht aufgerufen.

Warum eigentlich so kompliziert ?

Setze den Button doch zur Entwurfzeit auf Disabled und im onCreate der MDI-Form sag einfach
Delphi-Quellcode:
frmmain.Drucken.Enabled:=true
Oder sehe ich da jetzt was falsch ?

Jasocul 22. Jul 2005 08:02

Re: einen Button Disabled setzen
 
Ja das siehst du falsch. Wenn eine Form geschlossen wird, bleibt der Button trotzdem enabled.
Zum Problem:
benutzt du den richtigen Zähler?
Delphi-Quellcode:
if frmmain.zaehler<>0 then // Probier das mal
    frmmain.Drucken.Enabled:=true
else
    frmmain.Drucken.Enabled:=false;
Du darfst natürlich nur einen zentralen Zähler verwenden.

jensw_2000 22. Jul 2005 08:12

Re: einen Button Disabled setzen
 
Den Button kann man ja auch im onClose wieder deaktivieren ...


Die Lösung mit dem Zähler halte ich jedoch für fragwürdig, weil
der Aspekt mit dem "Daten drinnen stehen" völlig ausser acht gelassen wird.

Zitat:

wenn die Form noch nicht offen ist, bzw die Daten noch nicht drinnen sind
Deine MDI-Form zieht die Daten vermutlich aus einer Table oder Query.
Wie wärs, wenn du den Button nicht im onCreate aktivierst sondern nachdem die Datenquelle geöffnet bzw. verbunden wurde.

Dann kannst du sogar noch prüfen ob die Datenquelle auch Datensätze enthält.
Zu diesem Zeitpunkt ist sicher das die Form existiert und Daten auch enthält ...

z.B.

Delphi-Quellcode:
if mdiform.dbgrid1.datasource.dataset.recordcount > 0 then frmmain.Drucken.Enabled:=true

cell 22. Jul 2005 08:13

Re: einen Button Disabled setzen
 
wo schreib ich das rein atm hat ich das im Form.Activate stimmt das ??

jensw_2000 22. Jul 2005 08:16

Re: einen Button Disabled setzen
 
Wenn die Table/Query auf der MDI Form liegt, dann im AfterOpen der Table/Query ...

Da gehts übrigens auch leichter ...

Delphi-Quellcode:
frmmain.Drucken.Enabled:=(dataset.recordcount > 0)
Dann wird der Button auch deaktiviert falls du die Query erneut abfragst und diese keine Datensätze zurückgibt ...

cell 22. Jul 2005 08:20

Re: einen Button Disabled setzen
 
nein die sind in einem eigenen datamodule aber lassen wir das mal mit den daten weg, also nur wenn die Form aufgefurfen wird! das kann man doch dann auch bei Form.Activate machen oder ????

Sharky 22. Jul 2005 08:21

Re: einen Button Disabled setzen
 
Irgendwie habe ich das Gefühl das mit deinem Programmdesign etwas nicht stimmt ;-)
Ich bekomme immer feuchte Augen wenn ich in einer Methode eine referenzierung zu einer Form sehe (z.B. frm_blubb.myLabel.Caption).

Ich würde den Vorschlag von jensw_2000 (.RecordCount) damit kombinieren es in das Delphi-Referenz durchsuchen.AfterOpen deines TDataSets zu schreiben. Beim schliessen der DB-Abfrage (Delphi-Referenz durchsuchen.BeforeClose) kann der Butten wieder disabled werden.

jensw_2000 22. Jul 2005 08:24

Re: einen Button Disabled setzen
 
Zitat:

Ich würde den Vorschlag von jensw_2000 (.RecordCount) damit kombinieren es in das .AfterOpen deines TDataSets zu schreiben. Beim schliessen der DB-Abfrage (.BeforeClose) kann der Butten wieder disabled werden.
Da kann man auch prüfen ob die MDIForm existiert ...

Beispiel:
Delphi-Quellcode:
frmMain.Drucken.Enabled:=(dataset.recordcount > 0) AND ( Assigned(myMDIForm) ) ...

cell 22. Jul 2005 08:34

Re: einen Button Disabled setzen
 
ich hab mal probiert dass ich 3 childs hintereinander aufrufe, aber es zählt mir nicht weiter also eigentlich müsste zaehler:=3; sein, aber das is es ned =(

jensw_2000 22. Jul 2005 08:40

Re: einen Button Disabled setzen
 
ist Zaehler ein als Public deklarierte Variable von frmMain ?

Dass sollte sie sein sein, wenn du es wirklich über den Zähler lösen möchtest ..

Beim onCreate der MDI-Form dann halt

Delphi-Quellcode:
frmMain.Zaehler:=frmMain.Zaehler+1;

Jasocul 22. Jul 2005 09:22

Re: einen Button Disabled setzen
 
Er kann auch die protected Methode UpdateActions der MDIForm benutzen und prüfen, ob MDIChildCount > 0 ist.
Delphi-Quellcode:
...
type
  TForm1 = class(TForm)
...
  protected
    procedure updateActions; Override;
...
  end;
...

procedure TForm1.UpdateActions;
begin
  Drucken.Enabled := (MDIChildCount > 0);
end;


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