Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi brauche erklärung für typen (https://www.delphipraxis.net/127225-brauche-erklaerung-fuer-typen.html)

Molzer 9. Jan 2009 13:39


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:
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???
lg

DeddyH 9. Jan 2009 13:41

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];

mr_emre_d 9. Jan 2009 14:01

Re: brauche erklärung für typen
 
Mach doch einfach
Delphi-Quellcode:
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'; ...
so in etwa ...

DeddyH 9. Jan 2009 14:02

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.

Sherlock 9. Jan 2009 14:04

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

DeddyH 9. Jan 2009 14:08

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?

Molzer 9. Jan 2009 14:16

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:
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;
fg

Klaus01 9. Jan 2009 14:23

Re: brauche erklärung für typen
 
Zitat:

Zitat von Molzer
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:
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;
fg

Delphi-Quellcode:
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 -> record
Basics -> class

Grüße
Klaus

Molzer 9. Jan 2009 14:31

Re: brauche erklärung für typen
 
danke dir klaus!!

DeddyH 9. Jan 2009 14:34

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;

Molzer 11. Jan 2009 11:30

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:

Zitat von DeddyH
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;


Hawkeye219 11. Jan 2009 11:38

Re: brauche erklärung für typen
 
Hallo,

Zitat:

Delphi-Quellcode:
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];

Sollte das letzte "x" in jeder Zeile nicht ein "i" sein?

Gruß Hawkeye

DeddyH 11. Jan 2009 11:50

Re: brauche erklärung für typen
 
Stimmt, Asche auf mein Haupt :oops:

mkinzler 11. Jan 2009 11:54

Re: brauche erklärung für typen
 
Detlef, das war doch sicher reine Absicht, um zu Testen ob er den Code versteht! :zwinker:

DeddyH 11. Jan 2009 11:56

Re: brauche erklärung für typen
 
Naja, den Beweis hat er ja erbracht, dass dem nicht so ist :zwinker:

Molzer 11. Jan 2009 12:50

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:
 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
leider kommt noch beim btclick ein fehler:
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

mkinzler 11. Jan 2009 12:51

Re: brauche erklärung für typen
 
Zitat:

//wozu ist die 0 am ende ([1,i]0??)
standardwert, wenn Konvertierung fehlschlägt
Wie groß ist des das Grid?

DeddyH 11. Jan 2009 12:53

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]

Molzer 11. Jan 2009 13:19

Re: brauche erklärung für typen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von mkinzler
Zitat:

//wozu ist die 0 am ende ([1,i]0??)
standardwert, wenn Konvertierung fehlschlägt
Wie groß ist des das Grid?

4x10

mkinzler 11. Jan 2009 13:26

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:
.Cells[<Zeile>,<Spalte>]
Details wird dich Deltef gleich sagen

Molzer 11. Jan 2009 13:42

Re: brauche erklärung für typen
 
komm nicht drauf und die hilfe benutz auch immer, hilft mir aber nicht sehr oft...
Delphi-Quellcode:
x[i].l := StrToIntdef(StringGrid1.Cells[i,0],0);//d.h ernimmt die 0 statt i??
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)

Danke und fg

mkinzler 11. Jan 2009 13:45

Re: brauche erklärung für typen
 
Schau dir den Code mal im Debugger an. Bei welchem Wert von i tritt das auf?

DeddyH 11. Jan 2009 15:52

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

Molzer 11. Jan 2009 16:53

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.

Molzer 11. Jan 2009 16:57

Re: brauche erklärung für typen
 
zeilen und spalten vertausch...

mkinzler 11. Jan 2009 16:58

Re: brauche erklärung für typen
 
Du gibst nur eine 1 ein:
Delphi-Quellcode:
stringgrid1.cells[0,0]:='l';
Ausserdem stimmt die Grenze nicht
Delphi-Quellcode:
for i := 0 to 10 do
sind 11 Durchläufe und nicht 10

Molzer 11. Jan 2009 17:05

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