![]() |
Checkboxen um funktionen zu bauen
Hallo,
ich habe eine ziemlich große Anzahl an checkboxen (80x80) die alle untereinander zusammenhängen. Jetzt habe ich ziemlich wenig lust über 6000 abfragen zu machen ob checkbox-X gechecked ist. Habe ich eine andere Möglichkeit die information in eine variable(boolean) zu bekommen als immer per if? Leider will mir nichts in den Kopf kommen wie ich es anstellen könnte. Derzeit sieht es leider so bei mir aus. Nur zum veranschaulichen das ich über 6000 Funktionen schreiben müsste mit mehreren 1000 .show / .hide für die Checkboxen.
Delphi-Quellcode:
function func11 () : String; begin form1.CheckBox1.Show; Form1.CheckBox2.Show; form1.CheckBox3.Show; Form1.CheckBox4.Show; Form1.CheckBox5.Show; Form1.CheckBox6.Show; Form1.CheckBox7.Show; Form1.CheckBox8.Show; form1.CheckBoxa1.Show; Form1.CheckBoxa2.Show; form1.CheckBoxa3.Show; Form1.CheckBoxa4.Show; Form1.CheckBoxa5.Show; Form1.CheckBoxa6.Show; Form1.CheckBoxa7.Show; Form1.CheckBoxa8.Show; form1.Label2.Caption := 'XXX'; end; procedure TForm2.Button1Click(Sender: TObject); begin HidetheBoxes; if CheckBox1.Checked then begin func1; end; if CheckBox2.Checked then begin func2; end; if CheckBox3.Checked then begin func3; end; if CheckBox4.Checked then begin func4; end; if CheckBox5.Checked then begin func5; end; if CheckBox6.Checked then begin func6; end; if CheckBox7.Checked then begin func7; end; if CheckBox8.Checked then begin func8; end; if CheckBox9.Checked then begin func9; end; if CheckBox10.Checked then begin func10; end; if CheckBox11.Checked then begin func11; end; form2.hide; form1.Button1.Enabled := true; end; |
AW: Checkboxen um funktionen zu bauen
Soll immer nur eine der zur Auswahl stehenden Funktionen ausgeführt werden? In dem Fall würde ich die Checkboxen in die Wüste schicken und eine geeignetere Komponente wählen wie z.B. eine Radiogroup oder eine Combobox.
|
AW: Checkboxen um funktionen zu bauen
Du könntest die TAG Eigenschaft nutzen, um die Checkbox rauszukriegen, welche geklickt wurde.
Aber ich schließe mich auch meinem Vorgänger an, ein geeigneteres Objekt zu suchen, um dein Problem zu lösen. Vielleicht erklärst du dein Problem mal detaillierter. |
AW: Checkboxen um funktionen zu bauen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
leider kann ich nicht nur eine auswählen sondern wirklich jede checkbox mit jeder anderen verbinden um dann die entsprechende functionen zu kombinieren. wenn cbE1 und cbA1 checked dann ..... wenn cbE1 und cbA1 und cbA2,cbA3,cbA4,5,6 etc.... dann ..... also es sind wirklich 6400 abfragen weil ich alle untereinander kombinieren kann um einen entsprechenden code nachher aus der kombination zu generieren. Radio geht hier leider nicht. :( hier mal als Bild erklärt Anhang 39097 |
AW: Checkboxen um funktionen zu bauen
So ganz habe ich es immer noch nicht begriffen. Du hast je Checkbox eine aufzurufende Routine, gehst dann die Checkboxen durch und rufst sofern Checked die zugewiesene Routine auf, stimmt das?
[edit] Oder sollen gewisse Routinen bei bestimmten Kombinationen der Checkboxen aufgerufen werden? [/edit] |
AW: Checkboxen um funktionen zu bauen
Sind die Funktionen denn irgendwie auf Spalten bzw. Zeilen reproduzierbar, d.h. wenn in einer Zeile was geklickt wird, dann in derselben Zeile etwas machen oder?
|
AW: Checkboxen um funktionen zu bauen
Also handelt es sich hier um eine 80*80 Schaltmatrix.
Etwa so wie: ![]()
Delphi-Quellcode:
Checkboxen sind dafür ziemlich ungeeignet weil bei 6400 Checkboxen ist Windows (32bit) resourcenmäßig schon recht Nahe an der Obergrenze von 10000 GDI-Handles.
type
TSchaltMatrix = array[1..80, 1..80] of Boolean; Naheliegend wäre hier ein DrawGrid mit 80*80 Feldern. Bei einem Click in ein Feld wird einfach das entsprechende Element in dem Schaltmatrix Array umgekippt. Das hat enorme Vorteile: * beliebig skalierbar; Die Zellen des Drawgrids können je nach Wunsch dimensioniert werden * direkter Zugriff auf die Daten ohne endlose If-Abfragen * Resourcensparend * wenig Sourcecode |
AW: Checkboxen um funktionen zu bauen
Jede Checkbox kann einzeln eine Routine beinhalten aber auch mit anderen routinen interagieren. Das ganze ist ein routing von ein und ausgehenden Signalen.
Beispiel wenn ich (bild vom vorherigen Post): checkbox 1-1 klicke wird eingang 1 auf ausgang 1 geroutet aber gleichzeitig kann ich 1-2, 1-3 etc. mit routen. Um es noch besser zu machen geht auch multiples routen wie beispiel: 1-1 , 1-2, 1-3, 2-4, 2-5, 3-6, etc. Eingänge können mehrere Ausgänge simultan beinhalten, jedoch ein Ausgang immer nur einen Eingang. @ Zeras: Man kann es reduzieren , das ich den Eingang 2 nicht mehr auf den Ausgang 2 Routen kann wenn dieser bereits von Eingang 1 benutzt wird. Gleiche gillt für alle anderen Eingänge, entsprechend würde ich diese disablen. @ sx2008: so etwas in der Art ist es. Mein Problem ich hab 0,0 Ahnung von Drawgrids :D viel lesen wieder und euch im Forum mit dummen Fragen belästigen. Werde mir mal einen kleinen Aufbau machen mit 8x8 und gucken wie ich es hinbekomme. Danke ;) |
AW: Checkboxen um funktionen zu bauen
Liste der Anhänge anzeigen (Anzahl: 1)
Mach doch einfach ein Grid und werte die Klicks aus:
|
AW: Checkboxen um funktionen zu bauen
Zitat:
![]() Gezeigt wird ein 8*8 Schachbrett mit Beschriftung. Bei jedem Doppelklick wird eine neue Figur gesetzt. |
AW: Checkboxen um funktionen zu bauen
Sehr nett, Ich danke dir 1000fach ;)
|
AW: Checkboxen um funktionen zu bauen
Du solltest deine Quelltext-Formatierung etwas überdenken.
Das was du im ersten Post in
Delphi-Quellcode:
zeigst, suggeriert ein
procedure TForm2.Button1Click(Sender: TObject);
Delphi-Quellcode:
Verhalten, was es aber gar nicht ist.
if ... then ... else
Korrekt wäre also
Delphi-Quellcode:
Und das direkte Verweisen auf ganz konkrete Form-Instanz Variablen ist auch kontraproduktiv:
procedure TForm2.Button1Click(Sender: TObject);
begin HidetheBoxes; if CheckBox1.Checked then func1; if CheckBox2.Checked then func2; if CheckBox3.Checked then func3; if CheckBox4.Checked then func4; if CheckBox5.Checked then func5; if CheckBox6.Checked then func6; if CheckBox7.Checked then func7; if CheckBox8.Checked then func8; if CheckBox9.Checked then func9; if CheckBox10.Checked then func10; if CheckBox11.Checked then func11;
Delphi-Quellcode:
// Die Instanz dieser Klasse spricht man mit Self an, bzw. einfach ohne Nennung die Methoden benutzen
//form2.Hide; {Self.}Hide; // Verbindungen zu anderen Formularen über Events schaffen und nicht direkt dort reinpfuschen //form1.Button1.Enabled := true; {Self.}DoEnableButtonOnParentForm( Self ); end; |
AW: Checkboxen um funktionen zu bauen
Werde es mir zu Herzen nehmen. Genauso wie das tolle Buch aus der Ausbildung ^^ das derweilen schon verstaubt irgendwo in einer Kiste liegt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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