Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird!? (https://www.delphipraxis.net/113001-onclick-ereignis-wird-ausgeloest-wenn-form-geoeffnet-wird.html)

Svenkan 30. Apr 2008 22:35


OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird!?
 
Hallo!
Folgendes Problem: ich habe bspw. folgendes Ereignis:

Delphi-Quellcode:
procedure TGrundeinstellungen.CbAutorunClick(Sender: TObject);
begin
 if CbAutorun.Checked then
  ShowMessage('Damit VPlan Plus nach einem Windowsstart autom. gestartet werden kann, wird nach Bestätigung ein Eintrag im Schlüssel ''Software\Microsoft\Windows\CurrentVersion\Run'' erstellt.')
 else
  ShowMessage('Registrierungsschlüssel wird nach einem Klick auf ''OK'' entfernt!');
end;
Das Problem ist, dass die jew. Message selbst dann schon eingeblendet wird, sobald das Fenster im Programm geöffnet wird und nicht nur dann, wenn das Kästchen angeklickt wird. Aber komischerweise auch nur wenn die Option 'True' ist, ansonsten nicht.
Hat das schon damit was zutun, dass im OnCreate-Ereignis das Cb.Checked auf 'True' gesetzt wird?!

SirThornberry 30. Apr 2008 22:51

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
setzt du das checked-property per quelltext? Das OnClick wird ausgelöst sobald die checked-eigenschaft geändert wird. Also auch wenn dies per Tastendruck oder Programmcode passiert

Die Muhkuh 30. Apr 2008 22:52

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
Wobei ich den Sinn dahinter nicht verstehe, wenn man es per Code setzt, dass OnClick ausgeführt wird.

himitsu 30. Apr 2008 22:59

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
Zitat:

Zitat von Svenkan
Hat das schon damit was zutun, dass im OnCreate-Ereignis das Cb.Checked auf 'True' gesetzt wird?!

laß doch einfach mal zum Test das Setzen weg (auskommentieren) ? :zwinker:


Aber um es Kurz zu machen ... ja hat es.

wenn .Checked etwas programmseitig zugewiesen wird, dann wird das OnClick-Ereignis der Checkbox ausgelöst.

[edit] gibt's keine RedBox mehr?

Svenkan 2. Mai 2008 19:15

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
Uff...
Gibt es da irgendwie eine Möglichkeit, das zumgehen?
Ich hatte nicht vor, dem ganzen eine extra 'Start-Variable' zu geben, die danach auf TRUE oder so gesetzt wird und ab dann das ganze erst ausgeführt wird.

Fussball-Robby 2. Mai 2008 19:18

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
Für solche Sachen kann man immer sehr schön den Tag missbrauchen :wink:
Du setzt den Tag der CheckBox im OI auf 1 und änderst ihn nach den Änderungen im OnCreate auf 0. Ins CheckBox1.OnClick machst du dann noch:
Delphi-Quellcode:
if CheckBox1.Tag = 1 then Exit;
Mfg

himitsu 2. Mai 2008 19:41

Re: OnClick-Ereignis wird ausgelöst, wenn Form geöffnet wird
 
Als Erstes könnte man versuchen den Aufruf der Event-Funktion zu verhindern:
Delphi-Quellcode:
procedure NonClickSetChecked(Control: TCheckBox; NewChecked: Boolean);
var
  Temp: TNotifyEvent;
begin
  Temp := Control.OnClick;
  Control.OnClick := nil;
  Control.Checked := NewChecked;
  Control.OnClick := Temp;
end;
und dann z.B. statt CbAutorun.Checked := True; einfach nur NonClickSetChecked(CbAutorun, True); aufrufen.


In deinem Fall könntest du auch einfach nur prüfen ob die Form grad angezeigt wird und wenn dieses nicht der Fall ist, dann führst du den Code nicht aus. (beim Aufruf von OnCreate wäre dieses noch der Fall)
Code:
procedure TGrundeinstellungen.CbAutorunClick(Sender: TObject);
begin
  [b]if not IsWindowVisible(Handle) then
    exit;[/b]
  if CbAutorun.Checked then
    ShowMessage('Damit VPlan Plus nach einem Windowsstart autom. gestartet ...
  else
    ShowMessage('Registrierungsschlüssel wird nach einem Klick auf ''OK'' entfernt!');
end;


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