![]() |
brauche erklärung für typen
Hallo!
Ich muss einen typ erstellen von TB mit länge,breite,höhe und bez, von TB gibt es 10
Delphi-Quellcode:
lg
TB = class
l,b,h:integer; bez:string; end; //Den Typ hab ich erstellt. var x:array [1..10] of TB; for i:1 to 10 do x[i]=stringgrid1.cells[0,1]//das funkt natürlich nicht, aber ich stehe hier leider an... //wie kann ich jetzt von einem stringgrid die werte einlesen??? |
Re: brauche erklärung für typen
Du kannst den String ja nicht der Objektinstanz zuweisen, sondern nur dem Stringfeld der Instanz.
Delphi-Quellcode:
x[i].bez := stringgrid1.cells[0,1];
|
Re: brauche erklärung für typen
Mach doch einfach
Delphi-Quellcode:
so in etwa ...
TB = [b]record[/b]
l,b, h:integer; bez:string; end; var x: TB; ... x.l := 10; x.b := 20; x.h := 30; x.bez := 'bez'; ... |
Re: brauche erklärung für typen
Das löst das Problem aber auch nicht. Auch so muss er auf ein Feld eines Array-Elements seines Typs zugreifen.
|
Re: brauche erklärung für typen
Ich verstehe das Problem nicht.
:oops: Ganz von alleine passiert in Delphi nunmal gar nichts. Ein bisschen was muss man halt programmieren... Sherlock |
Re: brauche erklärung für typen
Ich hab doch bereits in #2 gepostet, was zu tun ist. Wieso da nun Records ins Spiel kommen, was weiß denn ich?
|
Re: brauche erklärung für typen
Liste der Anhänge anzeigen (Anzahl: 1)
ein typ ist in diesem fall einfacher wie ein record oder? bin leider blutiger anfänger...
soll aber typ verwenden.. hab ein bild anbei, steh da voll an...
Delphi-Quellcode:
fg
var x:array [1..10] of TB;
i:integer; procedure TForm2.Button1Click(Sender: TObject); begin for i := 1 to 10 do begin x[i].bez := stringgrid1.cells[0,1],stringgrid1.cells[0,2],stringgrid1.cells[0,3],stringgrid1.cells[0,4],; end; end; |
Re: brauche erklärung für typen
Zitat:
Delphi-Quellcode:
Basics ->
var x:array [1..10] of TB;
i:integer; procedure TForm2.Button1Click(Sender: TObject); begin for i := 1 to 10 do begin x[i] := TB.create; // Instanz erstellen, wenn das nicht vorher passiert ist // und nicht vergessen sie wieder freizugeben, wenn Du sie nicht mehr brauchst x[i].bez := stringgrid1.cells[0,i]; // Bezeichnung zuweisen end; end; ![]() Basics -> ![]() Grüße Klaus |
Re: brauche erklärung für typen
danke dir klaus!!
|
Re: brauche erklärung für typen
Und nun nochmal im Ganzen:
Delphi-Quellcode:
var x: array[1..10] of TB;
//Beim Erzeugen des Formulars die Objekte anlegen procedure TForm2.FormCreate(Sender: TObject); var i: integer; begin for i := Low(x) to High(x) do x[i] := TB.Create; end; //auf ButtonKlick mit Daten füllen procedure TForm2.Button1Click(Sender: TObject); var i: integer; begin for i := Low(x) to High(x) do begin //Länge, Breite und Höhe sind Zahlen, daher Umwandlung nötig x[i].l := StrToIntDef(StringGrid1.Cells[1,x],0); x[i].b := StrToIntDef(StringGrid1.Cells[2,x],0); x[i].h := StrToIntDef(StringGrid1.Cells[3,x],0); x[i].bez := StringGrid1.Cells[4,x]; end; end; //Im OnDestroy Objekte wieder freigeben procedure TForm2.FormDestroy(Sender: TObject); var i: integer; begin for i := Low(x) to High(x) do x[i].Free; end; |
Re: brauche erklärung für typen
Hallo und Danke für die zahlreichen Hilfen!!
Bei diesem habe ich ein Problem! Zeile mit x[i].l,b,h schreibt er mir: E2010 Inkompatible Typen: 'Integer' und 'Array' ?? warum das denn?? das selbe habe ich wenn ich etwas aus einem array (zb in einem memo)ausgeben möchte.. woran liegt das?? lg Zitat:
|
Re: brauche erklärung für typen
Hallo,
Zitat:
Gruß Hawkeye |
Re: brauche erklärung für typen
Stimmt, Asche auf mein Haupt :oops:
|
Re: brauche erklärung für typen
Detlef, das war doch sicher reine Absicht, um zu Testen ob er den Code versteht! :zwinker:
|
Re: brauche erklärung für typen
Naja, den Beweis hat er ja erbracht, dass dem nicht so ist :zwinker:
|
Re: brauche erklärung für typen
Danke!!
Ich habs schon mit i einmal probiert und es hat nicht funkioniert, muss wohl noch etwas anderes geändert haben... ich würde gerne noch etwas wissen..
Delphi-Quellcode:
leider kommt noch beim btclick ein fehler:
x[i].l := StrToIntDef(StringGrid1.Cells[1,i],0); //wozu ist die 0 am ende ([1,i]0??)
x[i].b := StrToIntDef(StringGrid1.Cells[2,i],0); x[i].h := StrToIntDef(StringGrid1.Cells[3,i],0); x[i].bez := StringGrid1.Cells[4,i]; memo1.lines.add(inttostr(x[i].l));//wie kann ich intdef wieder in einen strign umwandeln Erste Gelegenheit für Exception bei $75C942EB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00463DDC in Modul 'Project1.exe'. Lesen von Adresse 067EEF60'. Prozess Project1.exe (4912) fg |
Re: brauche erklärung für typen
Zitat:
Wie groß ist des das Grid? |
Re: brauche erklärung für typen
Zur ersten Frage: StrToIntDef markieren -> F1 (das kann man ja wohl verlangen). Und zur zweiten: hat Dein StringGrid evtl. zu wenig Spalten?
[edit] *Boah* will auch Mod werden, dann kann ich Maskus' Posts vorher löschen, bevor ich meine eigenen abschicke :twisted: [/edit] |
Re: brauche erklärung für typen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: brauche erklärung für typen
Dann solltest du den Code so anpassen, das er die Werte aus den Zeilen statt den Spalten zieht.
Delphi-Quellcode:
Details wird dich Deltef gleich sagen
.Cells[<Zeile>,<Spalte>]
|
Re: brauche erklärung für typen
komm nicht drauf und die hilfe benutz auch immer, hilft mir aber nicht sehr oft...
Delphi-Quellcode:
Erste Gelegenheit für Exception bei $75C942EB. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00463E38 in Modul 'Project1.exe'. Schreiben von Adresse 00000008'. Prozess Project1.exe (240)
x[i].l := StrToIntdef(StringGrid1.Cells[i,0],0);//d.h ernimmt die 0 statt i??
Danke und fg |
Re: brauche erklärung für typen
Schau dir den Code mal im Debugger an. Bei welchem Wert von i tritt das auf?
|
Re: brauche erklärung für typen
Damit der Code tut, muss das StringGrid mindestens 5 Spalten (inkl. fixer Spalten) haben. Spalten und Zeilen sind 0-indiziert, d.h. der Index der ersten Spalte/Zeile beträgt 0, der Index der letzten hingegen Count - 1. Und der Standardwert bei StrToIntDef bedeutet, dass dieser zurückgegeben wird, wenn die Konvertierung fehlschlagen sollte. Beispiel:
Delphi-Quellcode:
StrToIntDef('123',0); //gibt 123 zurück
StrToIntDef('Das geht so nicht',0); //gibt 0 zurück, da der String nicht umgewandelt werden kann |
Re: brauche erklärung für typen
ich hab jetzt nur l genommen und gebe überall eine 1 ein und bekomme eine 0
also füllt er das array gar nicht mit die zahlen.. oder meine ausgabe ist falsch??
Delphi-Quellcode:
type
TB = class l:integer; end; var x: array[1..10] of TB; rocedure TForm2.FormCreate(Sender: TObject); var i: integer; begin stringgrid1.cells[0,0]:='l'; for i := 0 to 10 do x[i] := TB.Create; end; rocedure TForm2.Button1Click(Sender: TObject); var i: integer; begin for i := 1 to 10 do x[i].l := StrToIntdef(StringGrid1.Cells[i,0],0); memo1.Lines.Add(inttostr(x[1].l)); end; end. |
Re: brauche erklärung für typen
zeilen und spalten vertausch...
|
Re: brauche erklärung für typen
Du gibst nur eine 1 ein:
Delphi-Quellcode:
Ausserdem stimmt die Grenze nicht
stringgrid1.cells[0,0]:='l';
Delphi-Quellcode:
sind 11 Durchläufe und nicht 10
for i := 0 to 10 do
|
Re: brauche erklärung für typen
bei 0 steht l..
aber jetzt hab ichs.. danke für deine/eure hilfe.. fg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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