Status von Toggleboxen in einer Schleife setzen[gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bernd72
Beiträge: 5
Registriert: So 31. Aug 2014, 21:05

Status von Toggleboxen in einer Schleife setzen[gelöst]

Beitrag von Bernd72 »

Code: Alles auswählen

If (GetBit) then
            D1S1280.State:=cbchecked
Else
            D1S1280.State:=cbunchecked; 

Ich stelle mir das so in der Art vor "D1S[Zähler].State:=cbcheckef". Bisher habe ich eine Routine geschrieben, die mir den Code erzeugt hat.
Pascal hatte ich 1997 im Fachabitur, von daher bin ich recht schnell eingestiegen und nach 4 Wochen habe ich eine lauffähige prozedurale Monsterapp erzeugt.
Ich muss mir das in Klassen und Objekten denken noch angewöhnen.
Meine App. :)
Meine App. :)
Zuletzt geändert von Bernd72 am So 31. Aug 2014, 23:45, insgesamt 1-mal geändert.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Status von Toggleboxen in einer Schleife setzen

Beitrag von Michl »

Hallo Bernd72, willkommen in Lazarusforum.

Sieht ja schon mal vielversprechend aus!

Konnte zwar keine Frage entdecken, denke aber trotzdem, dass Du eine stellen wolltest?!

Willst Du wissen, welche ToggleBoxen als "Checked" markiert sind bzw. welche gerade angeklickt wurde wäre das z.B. so möglich (bei Name "D1Sl..." ...Zahl) :

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  aComp: TComponent;
  i: Integer;
  s: String;
begin
  s:='';
  for aComp in Self do
    if (aComp is TToggleBox) and TToggleBox(aComp).Checked then
      if Pos('D1S', TToggleBox(aComp).Name) = 1 then
        if TryStrToInt(copy(TToggleBox(aComp).Name, 4, Length(TToggleBox(aComp).Name) - 3), i) then
          s:=s+'CheckBox: '+IntToStr(i)+' Checked!'+LineEnding;
  ShowMessage(s);
end;
 
procedure TForm1.ToggleBoxChange(Sender: TObject);
var
  i: Integer;
begin
  if Sender is TToggleBox then
    if Pos('D1S', TToggleBox(Sender).Name) = 1 then
      if TryStrToInt(copy(TToggleBox(Sender).Name, 4, Length(TToggleBox(Sender).Name) - 3), i) then
        if TToggleBox(Sender).Checked then
          ShowMessage('CheckBox: '+IntToStr(i)+' Checked')
        else
          ShowMessage('CheckBox: '+IntToStr(i)+' Unchecked')  
end; 
Siehe auch http://wiki.freepascal.org/TToggleBox/de
Zuletzt geändert von Michl am So 31. Aug 2014, 22:37, insgesamt 3-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Status von Toggleboxen in einer Schleife setzen

Beitrag von theo »


Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Status von Toggleboxen in einer Schleife setzen

Beitrag von Michl »

theo hat geschrieben:Ich glaube er meint sowas: http://www.lazarusforum.de/viewtopic.ph ... 91&p=56657
Ja, wer den Threadtitel lesen kann ist klar im Vorteil :oops:

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Bernd72
Beiträge: 5
Registriert: So 31. Aug 2014, 21:05

Re: Status von Toggleboxen in einer Schleife setzen

Beitrag von Bernd72 »

Michl hat geschrieben:
theo hat geschrieben:Ich glaube er meint sowas: http://www.lazarusforum.de/viewtopic.ph ... 91&p=56657
Ja, wer den Threadtitel lesen kann ist klar im Vorteil :oops:
Beide Antworten sind sehr hilfreich. Danke Michl und Danke Theo. Und vielen Dank für das herzliche Willkommen.
Die App hat in dem Hauptformular inzwischen ca. 25.000 Codezeilen und es ist verdammt schwer die Übersicht nicht zu verlieren.

Jetzt will ich den ganzen Code noch auf Objektorientiert umbauen. Ich werde in den nächsten Tagen mit Fragen kommen. Ich lese mich aber erstmal in die entsprechende Literatur ein. Ich bin total überrascht von der IDE, vor allem dass alles so stabil läuft. Ich habe die App und Sourcecode mal als Alpha sowie als Public Domain Soft rausgehauen. Ich habe noch brauchbare Klassen gefunden aber die sind GPL. Da muss ich mir wohl noch den Lizenztext besorgen und dazupacken.

wp_xyz
Beiträge: 5139
Registriert: Fr 8. Apr 2011, 09:01

Re: Status von Toggleboxen in einer Schleife setzen[gelöst]

Beitrag von wp_xyz »

Die App hat in dem Hauptformular inzwischen ca. 25.000 Codezeilen
Das ist eindeutig zuviel, Wie kannst du denn da noch navigieren? Wenn ich deinen Screenshot anschaue, dann nehme ich an, dass auf jeder Seite des PageControl andere Controls zu sehen sind. Bei dieser Anzahl von Pages kann ich mir dann aber schon vorstellen, dass man auf soviele Zeilen im Hauptformular kommt, wenn man nicht aufpasst.

Ich würde jede Seite in einen Frame auslagern, so dass jede Seite des PageControl in einer eigenen Unit landet. Einen Frame kannst du visuell gestalten wie ein Formular. Die Frames kannst du dann ins PageControl des Hauptformulars einfügen. All die Click-Handler etc. stehen dann halt nicht mehr im Hauptformular sondern in den Frame-Units. Da die verschiedenen Seiten wahrscheinlich gemeinsame Daten verwenden, würde ich noch zwei eine weitere Units verwenden, eine, die nur die Daten deiner Anwendung enthält, und eine die allgemeinen, von allen Frames verwendete Routinen zur Verfügung stellt.

Noch ein wichtiger Tip: Verwende bei jeder Komponente, die du auf das Formular/den Frame klickst, einen "sprechenden" Name. Bei Edit1 bis Edit194 wird man wahnsinnig!

Näheres über TFrame findest du z.B. auf http://wiki.lazarus.freepascal.org/Frames.

Klar, das bedeutet, dein Programm von Grund auf neu zu schreiben, aber ohne diese Maßnahme wirst du dich in wenigen Monaten schon nicht mehr darin zurecht finden.

Antworten