| Autor |
Beitrag |
Sylvus
      
Beiträge: 195
|
Verfasst: Fr 25.09.09 23:57
Hay Leute, bin noch ziemlich ungeübt mit Pointern....darum hier ein ganz simples Problem:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type TAnzeige = class(TObject) Grafik: array[1..8] of TImage; constructor Create(); destructor Destruct(); procedure switch(img: integer); procedure erzeuge(pos: TPoint; img_name: string); end;
Anzeige_pointer = ^TAnzeige; ... Anzeige_temp:Anzeige_pointer; ... Anzeige_temp:=@Anzeige; Anzeige_temp^[I] := TAnzeige.Create; Anzeige_temp^[I].erzeuge(temp_pos, 'BILD' + inttostr(I)); |
Wo ist das Problem? Das Problem ist, dass ich folgende Fehlermeldung erhalte:
[DCC Fehler] Unit1.pas(211): E2149 Klasse besitzt keine Standardeigenschaft
Ich weiß aber nicht, was genau falsch ist, vielleicht ist von euch einer so nett und erklärt mir mein Problem
DANKE & Grüße Sylvus
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 26.09.09 00:28
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Sa 26.09.09 17:11
achso, ja war nur für mich, weil ich dachte ich muss das so machen... habs jetzt gerade so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type
TAnzeige = class(TObject) Grafik: array[1..8] of TImage; Status: array[1..8] of boolean; constructor Create(); destructor Destruct(); procedure switch(img: integer); procedure erzeuge(pos: TPoint; img_name: string);
end; Anzeige_pointer = ^TAnzeige;
Anzeige_pointer:=@Anzeige[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgN' + inttostr(I)); |
aber da bekomm ich die Fehlermeldung: '(' erwartet.....
Wäre nett wenn du mir da nochmal hilfst!
Viele Grüße
Sylvus
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Sa 26.09.09 17:22
Sylvus hat folgendes geschrieben : | Delphi-Quelltext 1:
| Anzeige_pointer:=@Anzeige[I]; | |
Was ist "Anzeige" ?
Warum "ernennst" du einen neuen destructor an Stelle von "Destroy" ?
Grüsse, Dirk
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Sa 26.09.09 17:24
mir wurde gesagt, ich muss das so machen
Hier mal der "ganze" Code:
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:
| var Anzeige: array[0..10] of TAnzeige;
implementation uses Unit1;
constructor TAnzeige.Create; var I: Integer; begin inherited Create; for I := 1 to 8 do begin self.Grafik[i] := TImage.Create(Form1); self.Grafik[I].Parent := Form1; end; end;
destructor TAnzeige.Destruct; var i: Integer; begin for i := 1 to 8 do self.Grafik[i].Free; inherited; end; |
Danke für die Hilfe!
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Sa 26.09.09 17:31
Dann ist Dein "Anzeige_pointer" doch wie bereits gesagt wurde völlig überflüssig.
Delphi-Quelltext 1: 2:
| Anzeige[i] := TAnzeige.Create; Anzeige[i].erzeuge(...) |
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Sa 26.09.09 17:50
neeee- ich hab da ja verschiedene Arrays... ok es sieht so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
if J = 0 then begin Anzeige_pointer:=@Anzeige[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgN' + inttostr(I)); if J = 1 then begin Anzeige_pointer:=@AnzeigeS[I]; Anzeige_pointer := TAnzeige.Create; Anzeige_pointer^.erzeuge(temp_pos, 'imgS' + inttostr(I)); ... |
und das wollte ich jetzt kürzer fassen... Danke!
Grüße Sylvus
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Sa 26.09.09 18:04
|
|
Sylvus 
      
Beiträge: 195
|
Verfasst: Sa 26.09.09 18:07
Na ich wollte das:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
case J of 0: begin Anzeige[I] := TAnzeige.Create; Anzeige[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; 1: begin AnzeigeS[I] := TAnzeige.Create; AnzeigeS[I].erzeuge(temp_pos, 'imgN' + inttostr(I)); end; ... end; |
so schreiben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var Anzeige: array[0..10] of TAnzeige; AnzeigeS: array[0..10] of TAnzeige; AnzeigeU: array[0..10] of TAnzeige; AnzeigeUS: array[0..10] of TAnzeige;
for J:=1 to 4 do begin
case J of 1: pointer:=Anzeige 2: pointer:=AnzeigeS 3: pointer := AnzeigeU ...
pointer[I] := TAnzeige.Create; pointer[I].erzeuge(temp_pos, 'imgN' + inttostr(I));
... end; end; |
//habs jetzt glaub ich geschafft, trotzdem wenn ihr meint das ist unsinnig dann sagt mir das bitte  Will ja einen ordentlichen Code!
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 26.09.09 18:10
Du mixt alten Code mit neuem ohne zu wissen, was Du eigentlich machst. Entweder Du willst mit Objekten Arbeiten (Deiner TAnzeige, die 8 TImage hält oder so) oder Du willst mit Arrays arbeiten.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Tryer
      
Beiträge: 226
Erhaltene Danke: 7
|
Verfasst: Sa 26.09.09 18:11
Du willst also keine Anzeige, sondern ein AnzeigeArray auswählen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TAnzeigeArray = Array[0..10] of TAnzeige
var Anzeige, AnzeigeS: TAnzeigeArray;
..
var AnzArray: TAnzeigeArray;
Case J of 1: AnzArray := Anzeige;
AnzArray[i] := TAnzeige.Create; |
|
|