Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TCheckBox.OnClick extern aufrufen (https://www.delphipraxis.net/179198-tcheckbox-onclick-extern-aufrufen.html)

LoewenZahn 19. Feb 2014 17:00

TCheckBox.OnClick extern aufrufen
 
Hallo,

ich habe folgendes Problem:

IST:
Auf einer Form ist eine ganze Horde von Checkboxen angegliedert. Diese haben jeweils eigenes OnClick Event. Nun kann der Benutzer mit den Steuerelementen hantieren und dadurch verschiedene Elemente (Kopfbereich, Bilder, Tabellen, ... ) auf einem Report ein/-ausblenden.

SOLL:
Ich möchte beim OnShow der Form, alle OnClick Events der Checkboxen einmal ausführen. Dadurch sollen die Elemente des Reports, unabhängig der zuletzt gespeicherten Einstellungen, das anzeigen, was die Checkboxen beim Start anzeigen.

VERSUCHT:
Ich habe gedacht, ich könnte einfach wie bei einem Button, das Event via "Button1.click;" aufrufen, geht leider nicht.

Delphi-Quellcode:
 
//Starte das OnClick-Event aller Checkboxen die mit dem Namen cb_dm_ beginnen:
For i:=0 to self.ComponentCount-1 do
    if ( self.Components[i] is TCheckbox )
    and ( Pos('cb_dm_', self.Components[i].Name) = 1 ) then
    begin
      (self.Components[i] as TAdvofficeCheckbox).Click;
    end;
Jemand eine Idee / einen Tipp / Lösungsvorschläge?

Gruß
L.

Aviator 19. Feb 2014 18:02

AW: TCheckBox.OnClick extern aufrufen
 
Im Normalfall lagert man solche Dinge in Procedure aus und ruft diese dann auf.

Delphi-Quellcode:
procedure TForm1.CheckBox1Click(Sender:TObject);
begin
  DoSomething();
end;

procedure TForm1.DoSomething;
begin
  DoSomethingWhatYouWant;
end;
Beim OnShow der Form rufst du dann nur noch die DoSomething Methode auf.

blawen 19. Feb 2014 21:33

AW: TCheckBox.OnClick extern aufrufen
 
Zitat:

Zitat von LoewenZahn (Beitrag 1248584)
SOLL:
Ich möchte beim OnShow der Form, alle OnClick Events der Checkboxen einmal ausführen. Dadurch sollen die Elemente des Reports, unabhängig der zuletzt gespeicherten Einstellungen, das anzeigen, was die Checkboxen beim Start anzeigen.

Wieso erstellst Du nicht eine Procedure, welche den Status (Checked) der Checkboxen abfrägt und entsprechend handelt? So könntest Du im Prinzip auch gleich sämtliche "OnClick" auf diese Prozedur verlinken. So aus dem Bauch heraus habe ich das Gefühl, dass Du damit eine Menge an Quellcodezeilen einsparen kannst.

Helmi 19. Feb 2014 21:39

AW: TCheckBox.OnClick extern aufrufen
 
Oder auf eine ActionList ausweichen und die Executes in einer Schleife ausführen

Volker Z. 19. Feb 2014 21:43

AW: TCheckBox.OnClick extern aufrufen
 
Hallo,

könnte auch so gehen:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  i : Integer;
  c : TComponent;
  n : TNotifyEvent;
begin
  for i := 0 to ComponentCount - 1 do
    begin
      c := Components [i];
      if (c is TAdvOfficeCheckBox) and (Pos ('cb_dm_', c.Name) = 1) then
        begin
          n := TAdvOfficeCheckBox (c).OnClick;
          if Assigned (n) then
            n (c)
        end
    end
end;

Gruß

LoewenZahn 20. Feb 2014 08:16

AW: TCheckBox.OnClick extern aufrufen
 
Hallo und danke für die Hilfestellungen!

Ich habe den Code von Volker verwendet, dieser funktioniert einwandfrei, auch wenn diese Methode nicht die eleganteste ist.

Die Anmerkungen der anderen Mitglieder kann ich durchaus verstehen, es macht Sinn die Funktionalitäten in einzelne Proceduren auszulagern. Leider bin ich a. zu faul nun für alle Checkboxen jeweils eine extra Prozedure zu schreiben und b. ist diese Methode die Zeilenärmste.

Gruß
L.

DeddyH 20. Feb 2014 08:25

AW: TCheckBox.OnClick extern aufrufen
 
Zitat:

Zitat von LoewenZahn (Beitrag 1248693)
Leider bin ich a. zu faul nun für alle Checkboxen jeweils eine extra Prozedure zu schreiben

:?: Normalerweise schreibt man einen Eventhandler und weist diesen dann im OI allen entsprechenden Komponenten zu. Wenn man die konkrete Komponente wissen will, kann man ja den Sender-Parameter auswerten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz