![]() |
Array of Checkboxen : Zugrifsverletzung
ich möchte mir einen installer schreiben, der die installation von meinem programmen automatisiert. dazu habe ich mit 30 checkboxen erstellt, welche sich in dem array checkbox befinden. wenn ich nun auswerten weill welche checkboxen angeklickt wurden bekommt ich immer nur eine fehlermeldung : Zugriffsverletzung.
hier ist der wuellcode, der die probleme macht -.-
Delphi-Quellcode:
var
i: integer; j : integer; begin for i := 0 to 29 do begin if checkbox[i].Checked = True then ausgewählte_programme[j] := checkbox[i].Caption; if ausgewählte_programme[j] <> '' then j := j +1; end; |
Re: Array of Checkboxen : Zugrifsverletzung
Irgendwann wirst du in der Schleife auf einen ungültigen Index des Arrays zugreifen.
Ich würde den Fehler hier:
Delphi-Quellcode:
vermuten.
if ausgewählte_programme[j] <> '' then j := j +1;
Hast du denn den Code schon mal debuggt und dir die Werte der Variablen angeguckt? |
Re: Array of Checkboxen : Zugrifsverletzung
Was ist denn ausgewählte_programme? Eine TStringlist? Ist diese auch groß genug?
P.S.: Willkommen in der DP :dp: |
Re: Array of Checkboxen : Zugrifsverletzung
Dazu ist J nicht initialisiert
p.s. Boolsche Werte nie auf True oder False abfragen : ![]() p.p.s : Strings zu einer Stringlist fügt man mit Add dazu |
Re: Array of Checkboxen : Zugrifsverletzung
ausgewählte_programme ist eine string array von 0 bis 30
ich habe es auch schon versucht zu debuggen. delphi macht es einige male bis es die fehlermeldung ausspuckt. ich poste hier einfach mal den gesamten quell code
Delphi-Quellcode:
dazu : start is die erste userform, die standartmäßig aufgerufen wird und form 1 ist die zweite userform die anschliessend angezeigt werden soll.
unit start;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls,ShellAPI, jpeg, GIFImg, tlhelp32, pngimage; type Tfrm_start = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; Image4: TImage; Image5: TImage; bt_weiter: TImage; bt_ende: TImage; Image6: TImage; Panel2: TPanel; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure bt_weiterMouseEnter(Sender: TObject); procedure bt_weiterMouseLeave(Sender: TObject); procedure bt_endeMouseEnter(Sender: TObject); procedure bt_endeMouseLeave(Sender: TObject); procedure bt_endeClick(Sender: TObject); procedure bt_weiterClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var frm_start: Tfrm_start; quelle : string; ziel : string; txt : textfile; currentdir: string; bat : string; programme: array [0 .. 30] of string; leerzeile : integer; zeile: string; checkbox : Array of TCheckBox; left: integer; top : integer; j : integer; filenames: Array[0 .. 30] of string; ausgewählte_programme : array[0..30] of string; implementation uses progress; {$R *.dfm} procedure Tfrm_start.bt_weiterClick(Sender: TObject); var i: integer; j : integer; begin for i := 0 to 29 do begin if checkbox[i].Checked = True then ausgewählte_programme[j] := checkbox[i].Caption; if ausgewählte_programme[j] <> '' then j := j +1; end; form1.Show; end; procedure Tfrm_start.FormCreate(Sender: TObject); var i: integer; begin // die checkboxen erstellen SetLength(checkbox, 30); left := 16; top := 49; for i := 0 to 29 do begin if i = 0 then else if i mod 10 = 0 then left := left + 240; checkbox[i]:= Tcheckbox.Create(panel2); checkbox[i].parent := panel2; checkbox[i].Visible := False; checkbox[i].Left := left; checkbox[i].Top :=top + j*23; checkbox[i].width := 200; j := j+1; if j = 10 then j :=0 ; if j = 0 then top := 49; end; // verfügbare Programme auslesen i := 0; currentdir := GetCurrentDir; begin j := 0; AssignFile(txt,currentdir + '\data.txt'); Reset(txt); Readln(txt, zeile); Readln(txt, zeile); repeat Readln(txt, zeile); programme[i] := copy(zeile,15,length(zeile) - 15); if programme[i] = '' then leerzeile := leerzeile + 1 else filenames[i] := programme[i] + '.txt'; if programme[i] <> '' then checkbox[j].Caption := programme[i]; if programme[i] <> '' then checkbox[j].Visible := True ; i:=i+1; if checkbox[j].caption = '' then else j := j + 1; until (leerzeile = 3); CloseFile(txt); end; end; Dank schoneinmal für die schnellen Antworten auch wenn diese mir nicht weitergeholfen haben. |
Re: Array of Checkboxen : Zugrifsverletzung
Kennst du schon die Komponente CheckListBox auf der Palettenseite "Zusätzlich"?
Ich glaube damit kannst du sehr viel Arbeit sparen. |
Re: Array of Checkboxen : Zugrifsverletzung
Tu Dir und uns einmal einen Gefallen und rücke ordentlich ein, dann kann man das auch lesen. Und wie guinnes schon sagte, j ist nicht initialisiert.
Delphi-Quellcode:
Übrigens weisen die statischen Arrays 31 Elemente auf, aber das dynamische nur 30. Ist das Absicht?
procedure Tfrm_start.bt_weiterClick(Sender: TObject);
var i: integer; j : integer; begin j := Low(ausgewählte_programme); for i := 0 to 29 do begin if checkbox[i].Checked then ausgewählte_programme[j] := checkbox[i].Caption; if ausgewählte_programme[j] <> '' then j := j +1; end; form1.Show; end; |
Re: Array of Checkboxen : Zugrifsverletzung
Wie gesagt:
- J ist nicht initialisiert und hat somit einen Zufallswert. - Bitte nicht auf = True prüfen Außerdem: in welcher Zeile hast du die AV? |
Re: Array of Checkboxen : Zugrifsverletzung
ok das mit dem initialisieren is logisch. habe ich übernommen. Aber warum sollte man nicht auf = True prüfen?
Die AV hatte ich in dieser zeile :
Delphi-Quellcode:
Aber diese taucht nun nicht mehr auf.
if checkbox[i].Checked = True then ausgewählte_programme[j] := checkbox[i].Caption;
Anstatt desen ist mein array ausgewählte_programme nun leer o.O |
Re: Array of Checkboxen : Zugrifsverletzung
Schau Dir doch mal Beitrag #6 an.
Eine (oder mehrere) CheckListBox(en) könnte deinen Aufwand radikal vereinfachen! Bevor du nicht geprüft hast, ob CheckListBox für Dich in Frage kommt ist jede weitere Änderung an deinem Programm mehr oder weniger sinnlos. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 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