AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Record in Record - Der linken Seite kann nichts zugewiesen..

Record in Record - Der linken Seite kann nichts zugewiesen..

Ein Thema von Andreas L. · begonnen am 19. Jan 2010 · letzter Beitrag vom 19. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2   
Andreas L.
(Gast)

n/a Beiträge
 
#1

Record in Record - Der linken Seite kann nichts zugewiesen..

  Alt 19. Jan 2010, 12:25
Hi,

ich habe folgende records:

Delphi-Quellcode:
type
  TRec1 = record
    Enabled: Boolean;
    Text: String;
  end;

  TRec2 = record
    Feld1: TRec1;
    Feld2: TRec1;
  end;

...


var
  myRec: TRec2;
begin
  myRec.Feld1.Enabled := True;
end;
Warum erhalte ich jetzt die Meldung "Der linken Seite kann nichts zugewiesen werden.". Kann ich keinen Record als Feld eines Records verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#2

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:32
Bin mir nicht ganz sicher, aber muss vor "TRec2 = record" nicht noch ein "type"?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:34
Hallo Andreas,

Wenn es so ist, wie du geschrieben hast, dürfte der Fehler nicht auftauchen.
Wenn allerdings Die Records in einer Tlist stecken dann kann es schon passieren.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:35
Zitat von MisterNiceGuy:
Bin mir nicht ganz sicher, aber muss vor "TRec2 = record" nicht noch ein "type"?
Ne, braucht man nur einmal für alles was in type deklariert wird:
Delphi-Quellcode:
type
  TRec = record
    //
  end;

  TObj = class(TObject);

  TObjEvent = procedure() of object;
Man kann aber type optional an jeder der Deklarationen voranstellen. Behebt aber mein Problem nicht

EDIT:

Zitat von p80286:
Wenn allerdings Die Records in einer Tlist stecken dann kann es schon passieren.
Der record wird als Feld einer Komponente eingeführt:

Delphi-Quellcode:
  TSomething = class(TComponent)
  private
    FRec: TRec2;
  published
    property Rec: TRec2 read fRec write FRec;
  end;
Und ich versuche von außen auf diese Eigenschaft zu zugreifen. Ich versuch mal das Feld als public zu definieren. Mal schauen was passiert...

EDIT2: Als public gehts auch nicht
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:45
Also irgendwas läuft bei dir schief habe den Code gerade in D2010 eingefügt, compiliert und alles hat funktioniert. Würde mich auch wundern, wenn das nicht funktionieren würde. Sicher, dass du es so gemacht hast, wie im ersten Post beschrieben?

Edit: Sorry, hab nicht komplett zu Ende gelesen.

Edit 2: Wenn du statt dem Record eine Klasse nutzen würdest, dann geht das, was du willst.

Und wenn ich eine public-Variable einfüge, so compiliert und funktioniert es bei mir!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#6

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:51
Hier mal mein original Code:
StartupListView.pas
Delphi-Quellcode:
type
  TStartupListViewColumn = record
    Visible: Boolean;
    Text: String;
  end;

  TStartupListViewColumns = record
    Name: TStartupListViewColumn;
    Status: TStartupListViewColumn;
    Command: TStartupListViewColumn;
    Location: TStartupListViewColumn;
    AppName: TStartupListViewColumn;
    AppManufacturer: TStartupListViewColumn;
    AppDescription: TStartupListViewColumn;
    FileName: TStartupListViewColumn;
    Parameters: TStartupListViewColumn;
  end;

  TStartupListView = class(TListView)
  private
    FVisibleColumns: TStartupListViewColumns;
    ...
  protected
    procedure SetVisibleColumns(Value: TStartupListViewColumns);
    procedure UpdateColumns;
    ...
  public
    ...
    property VisibleColumns: TStartupListViewColumns
      read FVisibleColumns write SetVisibleColumns;
  end;

...

procedure TStartupListView.SetVisibleColumns(Value: TStartupListViewColumns);
begin
  FVisibleColumns := Value;
  UpdateColumns;
end;

procedure TStartupListView.UpdateColumns;
begin
  Columns.BeginUpdate;
  try
    Columns.Clear;

    Columns.Add.Caption := FVisibleColumns.Name.Text;

    if FVisibleColumns.Status.Visible then
      Columns.Add.Caption := FVisibleColumns.Status.Text;

    if FVisibleColumns.Command.Visible then
      Columns.Add.Caption := FVisibleColumns.Command.Text;

    if FVisibleColumns.Location.Visible then
      Columns.Add.Caption := FVisibleColumns.Location.Text;

    if FVisibleColumns.AppName.Visible then
      Columns.Add.Caption := FVisibleColumns.AppName.Text;

    if FVisibleColumns.AppManufacturer.Visible then
      Columns.Add.Caption := FVisibleColumns.AppManufacturer.Text;

    if FVisibleColumns.AppDescription.Visible then
      Columns.Add.Caption := FVisibleColumns.AppDescription.Text;

    if FVisibleColumns.FileName.Visible then
      Columns.Add.Caption := FVisibleColumns.FileName.Text;

    if FVisibleColumns.Parameters.Visible then
      Columns.Add.Caption := FVisibleColumns.Parameters.Text;

  finally
    Columns.EndUpdate;
  end;
end;
Hauptunit, TStartupListView wird ganz normal auf die Form gezogen
Delphi-Quellcode:
procedure TfrmManager.ToolButton1Click(Sender: TObject);
begin
  StartupListView1.VisibleColumns.Name.Visible := True;
  StartupListView1.VisibleColumns.Status.Visible := True;
  StartupListView1.VisibleColumns.Command.Visible := True;
  StartupListView1.VisibleColumns.Location.Visible := True;
  StartupListView1.VisibleColumns.AppName.Visible := True;
  StartupListView1.VisibleColumns.AppManufacturer.Visible := True;
  StartupListView1.VisibleColumns.AppDescription.Visible := True;
  StartupListView1.VisibleColumns.FileName.Visible := True;
  StartupListView1.VisibleColumns.Parameters.Visible := True;

  StartupListView1.StartupList := damData.StartupList;
  StartupListView1.Refresh;
end;
Die Meldung wird bei jeden Schreib-Zugriff auf VisibleColumns ausgegeben.

Naja, wenn niemand mehr eine Idee hat, verwende ich halt ne Klasse.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:53
Bei so einer Frage solltest du schon den Code zeigen, der deinen Fehler erzeugt, und nicht oberflächlich ähnlichen, der aber problemlos kompiliert werden kann.

Schau mal hier.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#8

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:55
Siehe meinen obigen Post -> Edit.

Willst du eigentlich, dass du über den Objektinspektor auf die Eigenschaften zugreifen kannst? Dann würde ich auf Klassen umsteigen. Da hast du imho eh eine bessere Handhabung.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#9

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 12:59
Zitat von uligerhardt:
Bei so einer Frage solltest du schon den Code zeigen, der deinen Fehler erzeugt, und nicht oberflächlich ähnlichen, der aber problemlos kompiliert werden kann.
Der Beispiel-Code ist mit dem original Code identisch

Zitat:
Bei so einen Aufwand kann ich mir gleich eine Klasse bauen bzw. werd ich das jetzt auch machen.

Zitat von s.h.a.r.k:
Willst du eigentlich, dass du über den Objektinspektor auf die Eigenschaften zugreifen kannst?
Muss nicht unbedingt sein.

EDIT: Hab die records jetzt in Klasse umgebaut. Funktioniert alles super, danke an alle
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Record in Record - Der linken Seite kann nichts zugewies

  Alt 19. Jan 2010, 13:12
Zitat von Andreas L.:
Der Beispiel-Code ist mit dem original Code identisch
Das halte ich für ein Gerücht. Wenn ich deinen Code aus dem ersten Posting zu einem kompletten Programm ergänze:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TRec1 = record
    Enabled: Boolean;
    Text: string;
  end;

  TRec2 = record
    Feld1: TRec1;
    Feld2: TRec1;
  end;

procedure Test;
var
  myRec: TRec2;
begin
  myRec.Feld1.Enabled := True;
end;

begin
  Test;
end.
kompiliert das ohne Fehler oder Warnungen.
Zitat von Andreas L.:
Bei so einen Aufwand kann ich mir gleich eine Klasse bauen bzw. werd ich das jetzt auch machen.
ACK. Mit Records wirst du wohl keine elegante Lösung hinkriegen.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:07 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