AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi individuelles abrufen von einem record im record
Thema durchsuchen
Ansicht
Themen-Optionen

individuelles abrufen von einem record im record

Ein Thema von MrTerry · begonnen am 9. Jun 2009 · letzter Beitrag vom 11. Jun 2009
Antwort Antwort
MrTerry

Registriert seit: 9. Jun 2009
5 Beiträge
 
#1

individuelles abrufen von einem record im record

  Alt 9. Jun 2009, 23:55
hi
ich hab da mal ne Frage... (zufall? ^^)

ich arbeite mit delphi 2007 (falls das wichtig sein sollte)

ich habe ein Record mit anderen Records darin zusammengefasst

Delphi-Quellcode:
TRecord = record
 UnterRecord1 : TUnterRecord1;
 UnterRecord2 : TUnterRecord2;
 UnterRecord3 : TUnterRecord3;
end;


TUnterRecord1 = record
 bla : String;
 ...
 end;
mein Problem ist jetzt wenn ich eine procedure machen will, dass ich die Unterrecords
in eine variable oder zeiger speichern will und dann individuell aufrufen kann

so zum beispiel meine ich das :

Delphi-Quellcode:
var
Rec : TRecord;
Delphi-Quellcode:
procedure bearbeiten;
var irgendwas : keineAhnung;
begin
 rec.irgendwas.bla := 'Hallo';
end;
so, dass "irgendwas" variable Unterrecord1, 2 oder 3 sein kann;

weiß nicht ob ihr mich jetzt verstanden habt ^^
komm damit irgendwie nicht klar :/

wenn ihr mir helft, dann bitte wenns geht mit beispiel code erklären

danke schonmal im vorraus
lg Terry

[edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: individuelles abrufen von einem record im record

  Alt 10. Jun 2009, 00:03
Mit Records geht das so nicht. Du musst in der zuweisung immer den gesamten Unterrecord ersetzen also

Delphi-Quellcode:
var
    myRecord: TRecord;
    ur1: TUnterReord1;
...

   ur1 := myRecord.UnterRecord1;
   ur1.Bla := BlaBla;
   myRecord.UnterRecord1 := ur1;
Bei Verwendung von OOP wäre das natürlich besser lösbar
Markus Kinzler
  Mit Zitat antworten Zitat
MrTerry

Registriert seit: 9. Jun 2009
5 Beiträge
 
#3

Re: individuelles abrufen von einem record im record

  Alt 10. Jun 2009, 00:15
hmmm das wäre ja nur geringe verkürzung des quellcodes

naja... wenns nicht so geht gehts so nicht :-/ muss ich mir was anderes überlegen... oder den langen quellcode nehmen und für jeden fall abfragen.... ^^

trotzdem danke
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: individuelles abrufen von einem record im record

  Alt 10. Jun 2009, 00:40
Nehm doch Klassen und baue dir dafür allgemeingültige Prozeduren
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
MrTerry

Registriert seit: 9. Jun 2009
5 Beiträge
 
#5

Re: individuelles abrufen von einem record im record

  Alt 10. Jun 2009, 08:18
hmmm hab leider noch nie selbst mit klassen gearbeitet, da ich mich noch nicht rangetraut hatte....

hab mich jetzt etwas eingelesen und merke zumindest nicht, in wiefern mir das weiterhelfen kann ...
das problem bleibt da doch im endeffekt trotzdem weiterbestehn .... oder täusch ich mich da gerade? Oo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: individuelles abrufen von einem record im record

  Alt 10. Jun 2009, 10:01
Bei Record kann man immer nur komplette Untertypen austauschen ( Unterrecord1 als Stück aber keine Teile davon, will man das muss man es so kompliziert machen, wie ich oben gezeigt habe Teiltyp in lokale Variable kopieren, Teilwert anpassen und Zurückschreiben)
Bei Klassen kann man dafür Setterschreiben und diese dann mit einer entsprechenden Property verbinden
Markus Kinzler
  Mit Zitat antworten Zitat
MrTerry

Registriert seit: 9. Jun 2009
5 Beiträge
 
#7

Re: individuelles abrufen von einem record im record

  Alt 11. Jun 2009, 00:01
hmmm ich verstehe was du meinst.... und habe auch ungefähr ne vorstellung wie
aber kannste trotzdem einen kleinen beispielcode machen, damit ich mich nicht sinnlos verrenne ^^

ich weiß...beste lernmethode ist backtracking .... versuch und irrtum
aber ich glaub schon in meiner vorstellung mache ich es mir komplizierter als es sein muss

danke auf jeden fall schonmal
werd mich zu klassen wohl weiter belesen müssen

lg Terry
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#8

Re: individuelles abrufen von einem record im record

  Alt 11. Jun 2009, 00:23
sobald der Compiler es unterstützt, ginge auch sowas:
Delphi-Quellcode:
TRecord = record
private
  function GetBla(const Name: String): String;
  procedure SetBla(const Name, Value: String);
public
  UnterRecord1 : TUnterRecord1;
  UnterRecord2 : TUnterRecord2;
  UnterRecord3 : TUnterRecord3;
  property bla[const Name: String]: String read GetBla write SetBla;
end;


function TRecord.GetBla(const Name: String): String;
begin
  if Name = 'UnterRecord1then
    Result := UnterRecord1.bla
  else
...
Delphi-Quellcode:
var Rec: TRecord;

S := Rec.bla['UnterRecord1'];
ähnlich ginge es mit Objekten, wobei man da die meißten Möglichkeiten hat, wenn Record und Unterrecords durch Objekte ersetzt werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#9

Re: individuelles abrufen von einem record im record

  Alt 11. Jun 2009, 00:26
Hm, jetzt hatte ich den doofen Kasten, aber ich möchte es trotzdem so abschicken.. Passt (hoffentlich)...

Ich möchte dir auch noch einmal die Verwendung von Klassen empfehlen. Zumindest, wenn ich lese, dass Du dich da noch nicht dran "getraut" hast, könnte man sagen, dass du dann einiges (oder vieles) verpasst.

Das würde bei dir dann z.B. so aussehen:

Delphi-Quellcode:
type
  TRecord = class
  private
    FUnterRecord1: TUnterRecord1;
  public
    constructor Create;
    property UnterRecord1: TUnterRecord1 read FUnterRecord1;
  end;

...

procedure TForm1.DoSomething;
var
  R: TRecord;
begin
  // Den Kollegen erstellen
  R := TRecord.Create;
  R.UnterRecord1.Variable := 123;
end;

constructor TRecord.Create;
begin
  // Initialisieren...
  FUnterRecord1.Variable := 0;
end;
Alternativ könnte FUnterRecord1 natürlich auch selbst eine Klasse sein, von der im Constructor von TRecord eine Instanz erstellt wird... Ich will nicht zum übertreiben raten, es kommt immer auf den Kontext an, aber wer sich noch nie an Klassen herangetraut hat, der sollte sich damit beschäftigen.
Auf Dauer erspart man sich viel doppelten Code, man erhält die Übersichtlichkeit und damit spart man im Endeffekt viel Zeit.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: individuelles abrufen von einem record im record

  Alt 11. Jun 2009, 02:12
Zitat von MrTerry:
hmmm hab leider noch nie selbst mit klassen gearbeitet, da ich mich noch nicht rangetraut hatte....

hab mich jetzt etwas eingelesen und merke zumindest nicht, in wiefern mir das weiterhelfen kann ...
das problem bleibt da doch im endeffekt trotzdem weiterbestehn .... oder täusch ich mich da gerade? Oo
Grob gesagt:

Records: Variablen
Klassen: Variablen, Properties, Methoden(Procedure/Function)

Bei neueren Delphi Versionen kann man auch Methoden in Records implementieren.
Klassen müssen explizit erstellt & zerstört werden (Create & Free), welches bei
Records nicht der Fall ist, da Speicher zur Laufzeit alloziert wird.
Weiters beherrschen Klassen die Vererbung -> welches - wenn richtig eingesetzt - eine Aufgabe visuell und performancemäßig aufpeppeln kann

Da gibts noch ein Zwischending -> Object. Sie entspricht einer Klasse, jedoch ohne Vererbung und das allozieren des Speichers übernimmt hier Delphi wieder...

Hoffe ein wenig informativ gewesen zu sein

MfG
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz