Einzelnen Beitrag anzeigen

Metallicwar

Registriert seit: 5. Feb 2010
Ort: Bad Kissingen
293 Beiträge
 
Delphi XE Architect
 
#1

Problem bei case // Problem bei Komponenten löschen

  Alt 2. Sep 2010, 17:16
Erstmal mein aktueller Code, der allerdings durchaus unübersichtlich ist
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst, Unit4;

type
  TForm1 = class(TForm)
    CheckListBox1: TCheckListBox;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Formular: TForm;
  Frames: TFrame4;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
iChecked, iZaehler, iGecheckteFrames, iY, iRunter, iErstellteFrames: Integer;
begin
  Formular:=TForm.Create(Self);
  Formular.ClientHeight := 1500;
  Formular.ClientWidth := 670;
  iGecheckteFrames := 0;
  iY := 0;
  iRunter := 0;
  iZaehler := 0;
  for ichecked := 0 to CheckListBox1.Items.Count-1 do
    if CheckListBox1.Checked[ichecked] then
      if iGecheckteFrames = 14 then
      begin
        ShowMessage('Zwischenablage drucken + aktuelle Form drucken');
      end
      else
      begin
        if iZaehler = 10 then
        begin
          ShowMessage('Formular in Zwischenablage kopieren + Formular leeren');
          iZaehler := 0;
          iGecheckteFrames:= iGecheckteFrames + 1;
          if iGecheckteFrames = 14 then
          begin
            ShowMessage('Zwischenablage drucken + aktuelle Form leeren')
          end;
        end
        else
        begin
          if iZaehler = 0 then
          begin
            Frames := TFrame4.Create(Self);
            Frames.Name := CheckListBox1.Items[ichecked];
            Frames.ClientHeight := 200;
            Frames.Top := iY;
            Frames.Parent := Formular;
            iZaehler := iZaehler + 1;
            iGecheckteframes := iGecheckteframes + 1;
            if iGecheckteFrames = 14 then
            begin
            ShowMessage('Zwischenablage drucken und aktuelle Form drucken');
            end;
          end
          else
          begin
            if iZaehler <= 4 then
            begin
              Frames := TFrame4.Create(Self);
              Frames.Name := CheckListBox1.Items[ichecked];
              Frames.ClientHeight := 200;
              Frames.Top := iY + Frames.ClientHeight;
              iY := Frames.Top;
              Frames.Parent := Formular;
              iZaehler := iZaehler + 1;
              iGecheckteFrames := iGecheckteFrames + 1;
              if iGecheckteFrames = 14 then
              begin
                ShowMessage('Zwischenablage drucken + aktuelle Form drucken');
              end;
            end
            else
            begin
              if iZaehler = 5 then
              begin
                Frames := TFrame4.Create(Self);
                Frames.Name := CheckListBox1.Items[ichecked];
                Frames.ClientHeight := 200;
                Frames.Left := 350;
                Frames.Parent := Formular;
                iZaehler := iZaehler + 1;
                iGecheckteframes := iGecheckteframes + 1;
              end
              else
              begin
                Frames := TFrame4.Create(Self);
                Frames.Name := CheckListBox1.Items[ichecked];
                Frames.ClientHeight := 200;
                Frames.Left := 350;
                Frames.Top := iRunter + Frames.ClientHeight;
                iRunter:= Frames.Top;
                Frames.Parent := Formular;
                iZaehler := iZaehler + 1;
                iGecheckteFrames := iGecheckteFrames + 1;
              if iGecheckteFrames = 14 then
                begin
                  ShowMessage('Zwischenablage drucken + aktuelle Form drucken');
                end;
              end;
            end;
          end;
        end;
      end;
Formular.Show;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CheckListBox1.Items.Add('a1');
CheckListBox1.Items.Add('a2');
CheckListBox1.Items.Add('a3');
CheckListBox1.Items.Add('a4');
CheckListBox1.Items.Add('a5');
CheckListBox1.Items.Add('a6');
CheckListBox1.Items.Add('a7');
CheckListBox1.Items.Add('a8');
CheckListBox1.Items.Add('a9');
CheckListBox1.Items.Add('a10');
CheckListBox1.Items.Add('a11');
CheckListBox1.Items.Add('a12');
CheckListBox1.Items.Add('a13');
CheckListBox1.Items.Add('a14');
end;

end.
1. Problem:
Habe erfahren, dass es durch case Blöcke übersichtlicher machbar wäre.
Hab das mal ausprobiert, bin aber der Vermutung, dass das so nicht möglich ist, da anscheinend keine <= , <, etc. möglich sind:
Delphi-Quellcode:
        iGecheckteFrames:= iGecheckteFrames + 1;
        //iZaehler:= iZaehler +
        case iZaehler of
          10:
          begin
          // --> Anweisungen
          end;
          0:
          begin
          // --> Anweisungen
          end;
          <=4:
          begin
          // --> Anweisungen
          end;
          5:
          begin
          // --> Anweisungen
          end;
          >5<=9:
          begin
          // --> Anweisungen
          end;
        end;

2. Problem:
Wenn 10 Frames auf dem Formular platziert worden sind, soll er das Formular drücken und anschließend alle Frames vom Formular löschen. Dann soll er weiter die Schleife durchlaufen, und die weiteren Frames auf dem Formular erzeugen... usw.
Hatte es vor mit Frames.Destroy bzw. DestroyComponents. Hat da jemand eine Idee?

dadurch entsteht auch mein 3. Problem:
Wenn ich mir z.B. 5 Items anchecke und auf den Button klicke. Anschließend klicke ich erneut auf den Button und erhalte logischerweise eine Exception. Siehe Anhang.

Wäre cool, wenn ihr mir bei den Problemen helfen könntet, muss das bis Freitag Mittag fertig haben
Miniaturansicht angehängter Grafiken
error.png   programm.png  
  Mit Zitat antworten Zitat