Autor Beitrag
Hatebreeder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
D7 Corp
BeitragVerfasst: Do 20.11.03 12:19 
Hiho,

also ich habe ein Programm, dass aus einer Paradox Datenbank die Einträge ausliest und für jeden Eintrag eine Komponente vom Typ TGame erstellen soll:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TGCGMV2C.FormCreate(Sender: TObject);
begin
createobjects;
end;

procedure TGCGMV2C.createobjects;
var NewGame: TGame;
begin
  Table1.First;
  while not Table1.Eof do
  begin
    NewGame:=TGame.Create(GCGMV2C);
    NewGame.setDetails(Table1.FieldByName('Release Name').AsString,Table1.FieldByName('Name').AsString,Table1.FieldByName('Origin').AsString,Table1.FieldByName('Group').AsString,inttostr(Table1.FieldByName('Files').AsInteger),Table1.FieldByName('Filename').AsString,Table1.FieldByName('Release Date').AsString,Table1.FieldByName('Category').AsString);
    ListBox1.Items.Add(Table1.FieldByName('Release Name').AsString);
    Table1.Next;
  end;
end;


TGame sieht so aus:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
type
  TGame = class(TComponent)
  private
  protected
  public
    pReleaseName,pName,pOrigin,pGroup,pFiles,pFilename,pReleaseDate,pCategory: string;
    constructor create(AOwner: TComponent); virtual;
    function getReleaseName:string;
    procedure setDetails(ReleaseName,Name,Origin,Group,Files,Filename,ReleaseDate,Category: string);
  end;

constructor TGame.create;
begin
inherited;
end;

procedure TGame.setDetails(ReleaseName,Name,Origin,Group,Files,Filename,ReleaseDate,Category: string);
begin
pReleaseName:=ReleaseName;
pName:=Name;
pOrigin:=Origin;
pGroup:=Group;
pFiles:=Files;
pFilename:=Filename;
pReleaseDate:=ReleaseDate;
pCategory:=Category;
end;

function TGame.getReleaseName;
begin
getReleaseName:=pReleaseName;
end;


Nun soll per Click auf ein Element der ListBox in die verschiedenen EditFenster die jeweilige Eigenschaft geschrieben werden:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TGCGMV2C.ListBox1Click(Sender: TObject);
var i: integer;
ReleaseName: string;
begin
i:=11;
while i < ComponentCount do
begin
if Components[i] is TGame then
if TGame(i).pReleaseName = ListBox1.Items[ListBox1.ItemIndex] then
ReleaseName:= TGame(i).pReleaseName
else inc(i)
else inc(i);
LabeledEdit1.Text:=ReleaseName;
end;
end;


i:=11 weil ich 10 andere Komponenten habe und Nummer 11 die erste vom Typ TGame ist.

Hier arbeite ich absichtlich nur mit ReleaseName um das erstma zu testen, die anderen Eigenschaften werde ich dann später noch reinschreiben sobald das hier erstma läuft...

Allerdings bekomme ich beim Click auf die ListBox immer eine AccesViolation =/

Kann mir irgendwer helfen und weiß, was ich meine??

Danke schonmal!
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Do 20.11.03 13:39 
Hallo,

in der ListviewClick musst Du folgende Zeilen
ausblenden Delphi-Quelltext
1:
2:
if TGame(i).pReleaseName = ListBox1.Items[ListBox1.ItemIndex] then 
ReleaseName:= TGame(i).pReleaseName


in

ausblenden Delphi-Quelltext
1:
2:
if TGame(Controls[i]).pReleaseName = ListBox1.Items[ListBox1.ItemIndex] then 
ReleaseName:= TGame(Controls[i]).pReleaseName


ändern.

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Hatebreeder Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
D7 Corp
BeitragVerfasst: Do 20.11.03 14:41 
hoi, das klappt schonma super, die procedure sieht nun so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TGCGMV2C.ListBox1Click(Sender: TObject);
var i: integer;
ReleaseName: string;
begin
i:=11;
//while i < ComponentCount do
begin
if Components[i] is TGame then
begin
if TGame(Controls[i]).pReleaseName = ListBox1.Items[ListBox1.ItemIndex] then
begin
showmessage('debug:true');
ReleaseName:= TGame(Controls[i]).pReleaseName;
end
else showmessage('debug:false');
end
else inc(i);
LabeledEdit1.Text:=ReleaseName;
end;
end;


allerdings ist seltsamerweise immer false angesagt =/, da die bedingung nicht erfüllt ist
ich kann allerdings nicht den fehler finden, WARUM diese nicht erfüllt ist :shock: