Autor Beitrag
musiktiger
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 06.05.03 13:56 
Hallo ihr,

ich weiß der Titel klingt ein bisschen kömisch :nut: , aber ich weiß es nicht anders so kurz zu beschreiben.

Nun die lange Beschreibung:
Ich will einen Array erstellen in dem ich Daten für Kreise, Rechtecke und Trapeze speichern kann.
Also soll der Array nicht immer die gleichen Datentypen enthalten, sondern manchmal einen Record in dem die Kreisdaten (Radius, Mittelpunkt) gespeichert sind oder einen anderen Record, der die Rechteckdaten (Punkte: LinksOben, LinksUnten) enthält.

Hat jemand das verstanden und kann mir da helfen?
Ich wäre super dankbar! :D
Gruß,
MuTi
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 15:04 
Klar..habs verstanden.

Ich würd das array mit headern machen...

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
type
  TGeoKind = (gkCirc, gkQuad,gkTriangle...);
  
  tHeader = record
    kind : TGeoKind;
    ptr: Pointer;
  end;

  TGeoArr : array of THeader;


...in denen die art des records gespeichert ist und einen pointer zu dem tatsächlichen record. Bein erstellen des arrays musst du den speicher, für die einzelnen records, dann selbst reservieren (getMem, freeMem). Beim erstellen speicherst du im header, die art(kind) und die adresse(ptr) des recods ab...so kannst du später zwischen den verschiedenen records, mittels kind, differenzieren!

Wenn du fragen zu pointern hast, sag bescheid.

_________________
mfg.
mâximôv
musiktiger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 06.05.03 15:19 
Vielen Dank Maximus!

Puh, ich glaube ich müsste dazu erstmal ganz schön viel Neues verstehen und das dauert bei mir immer so lange. :?!?:
Wenn es aber nicht einfacher geht probiere ich es natürlich so. :nixweiss:

Ich hätte gedacht, dass man zum Beispiel die variable GeomObjekt mehrfach deklarieren könnte und dann irgendwie auswählen kann welche Deklaration man gerade meint. Das aber in der Unit selbst.

Verstehe nämlich noch nicht sooo viel von Headern und Pointern und so. :roll:
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 06.05.03 15:36 
Hi,

eventl. ist auch ein normal Record mit varianten Teilen sinnvoll. Also so:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type 
  TGeoKind = (gkCirc, gkQuad,gkTriangle...); 
  
  tHeader = record 
    // Hier allgemeine Variablen definieren

    Case kind: TGeoKind of
      gkCirc: (VariableCirc1, VariableCirc2: Integer);
      gkQuad: (VariableQuad1, VariableQuad2: Integer);
  end; 

  TGeoArr : array of THeader;

Verbraucht eventl. etwas mehr speicher aber es ist um einige einfacher zu programmieren.

Gruß
Tino
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 06.05.03 17:25 
Hier gab es doch erst letztens ein ganz ähnliches Problem, wo es um Flächen ging... Ich würde eine objektorientierte Variante nehmen, also TObject-Nachfahren erstellen, welche dann in einer Objektliste verwaltet würden. Je nach Nachfahre gibt es dann unterschiedliche "Variablen" (bei TRechteck Länge und Breite, Bei TKreis Radius etc).

Cu,
Udontknow
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 06.05.03 18:15 
@DontKnow: stimmt hatten wir...mit OOP wärs komfortabler!

@VariableRecordTeile: hatte ich auch drann gedacht...aber dann müssen die daten-teile doch immer gleich gross sein...?

// edit:

@MusikTiger: kannst dir ja mal antun -> www.delphi-forum.de/...amp;highlight=tkreis

_________________
mfg.
mâximôv
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Di 06.05.03 18:34 
maximus hat folgendes geschrieben:
@VariableRecordTeile: hatte ich auch drann gedacht...aber dann müssen die daten-teile doch immer gleich gross sein...?

Ne, eigentlich nicht!

Aber letztendlich würde ich die Objekt-Lösung nehmen.

Gruß
Tino
musiktiger Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 07.05.03 14:34 
Vielen Dank,

ich habe mir die Problematik in dem anderen Forum angesehen, aber nicht herausgefunden wie mir das helfen könnte.

Ich habe mal das von Tino ausprobiert, aber es würden dann ja in jedem Record auch die Variablen z.B. für einen Kreis bereitgestellt werden, auch wenn ich ein Rechteck speichere.

Ich nehme glaube ich die Anfangslösung von Maximus.
Damit nutze ich gleich die Gelegenheit und versuche mich mal mit Pointern. Wird sowieso mal Zeit, dass ich das verstehe.

Vielen Dank an alle, ihr habt mir sehr geholfen! :D
Gruß,
MuTi
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 07.05.03 15:06 
Hallo!

musiktiger hat folgendes geschrieben:
Ich habe mal das von Tino ausprobiert, aber es würden dann ja in jedem Record auch die Variablen z.B. für einen Kreis bereitgestellt werden, auch wenn ich ein Rechteck speichere.

Nein, die einzelnen Varianten-Teile des Rekords teilen sich den Speicherbereich.

musiktiger hat folgendes geschrieben:
Damit nutze ich gleich die Gelegenheit und versuche mich mal mit Pointern. Wird sowieso mal Zeit, dass ich das verstehe.

Dann schau Dir auch mal das neue Tutorial über Pointer in der Tutorial-Sparte an. Könnte hilfreich sein!

Gruß
Tino