AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Bekomme einfach kein globales "Array of Record" hin....
Thema durchsuchen
Ansicht
Themen-Optionen

Bekomme einfach kein globales "Array of Record" hin....

Ein Thema von JBJHJM · begonnen am 28. Sep 2009 · letzter Beitrag vom 30. Sep 2009
Antwort Antwort
Seite 2 von 2     12   
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#11

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 17:38
Delphi-Quellcode:
TProfil = record
    Name, Option1, Option2 : String;
    Wert: integer;
  end;

Profilspeicher = Array[1..30] of TProfil;

TSpeicher = class
  private
    FProfile: Profilspeicher;
    function GetProfile(Index: Integer): TProfil;
    procedure SetProfile(Index: Integer; P:TProfil);
  public
    property Profile[Index:Integer]: TProfil read GetProfile write SetProfile;
  end;

function TSpeicher.GetProfile(Index: Integer): TProfil;
begin
  if (Index >= Low(FProfile)) and (Index<=High(FProfile)) then
    Result := FProfile[index]
  else
    raise ERangeError.Create('ungültiger Index TSpeicher.Profile['+IntToStr(Index)+']');
end;
Nochmal hierzu: Irgendwie habe ich noch einen Fehler drinnen:

Ich möchte jetzt aus einer anderen Funktion, die in der gleichen Unit liegt, das Profilspeicher-Arry füllen, allerdings bekomme ich beim Kompilieren Fehler.
Was ich probiert habe:
TSpeicher.FProfile[x] := Tempprofil; --> Auf Eigenschaft 'FProfile' kann hier nicht zugegriffen werden
TSpeicher.PutProfile(x, TempProfil); --> Diese Form des Methodenaufrufs ist nur für Klassenmethoden erlaubt
Was fehlt mir? Die Funktionen sind alle vollständig, korrekt zugewiesen, aber ich bekomms nicht hin, sie korrekt anzusteuern!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#12

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 17:48
Delphi-Quellcode:
var Speicher: TSpeicher;
...
Speicher := TSpeicher.Create;
Speicher.Profile[1] := TempProfil;
So müsste das doch funktionieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#13

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 18:51
Zitat von DeddyH:
Delphi-Quellcode:
var Speicher: TSpeicher;
...
Speicher := TSpeicher.Create;
Speicher.Profile[1] := TempProfil;
So müsste das doch funktionieren.
"Gewissermaßen." Sch****antwort, gell?
Irgendwie habe ich das noch nicht nachvollziehen können. Anderes Beispiel:
Ich will von einer anderen Unit aus "Array[Profilnummer].Name" auslesen. Was genau muss ich dazu machen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#14

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 18:56
Wenn die Variable des Typs TSpeicher erreichbar ist, im Prinzip wie oben.
ShowMessage(Speicher.Profile[1].Name);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 19:16
Zitat von DeddyH:
Wenn die Variable des Typs TSpeicher erreichbar ist, im Prinzip wie oben.
Ok, das hilft schon mal weiter.
Wo sollte ich die Variable am besten deklarieren, wenn sie global verfügbar sein soll?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#16

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 19:18
Ich mache so etwas meist als Formulareigenschaft.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#17

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 20:14
Dachte ich mir fast. Meine aktuelle Unit hat allerdings gar keine Form, d.h. ich mach mich mal ans kopieren in ne neue Unit...
und nen schönen Abend noch!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#18

Re: Bekomme einfach kein globales "Array of Record"

  Alt 29. Sep 2009, 20:15
Dir auch
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
JBJHJM

Registriert seit: 16. Jan 2009
88 Beiträge
 
Delphi 2005 Personal
 
#19

Re: Bekomme einfach kein globales "Array of Record"

  Alt 30. Sep 2009, 12:10
Läuft immer noch nicht richtig. Beim Kompilieren läufts jetzt alles - dafür vielen Dank! - aber letztendlich gibts dann doch wieder Probleme.

Erstmal:
(Ich habe aktuell alles in Public gelegt, das gehört natürlich letztendlich nicht so, halt zum probieren)

Delphi-Quellcode:
TProfil = Record
...
TSpeicher = class
  private
  public
    Profilspeicher: Array of TProfil; //Der echte Speicher
    function Get(Index: Integer): TProfil;
    procedure Put(Index: Integer; S: TProfil);
    property PProfilspeicher[index: integer]: TProfil read Get write put;
  end;

TForm13 = class(TForm)
  private
  public
    Speicher : TSpeicher;
  end;

[...]
implementation

procedure SetLength(Filename: string);
begin
  setLength(???, 10);
end;
Was muss bei ??? hin, um die Länge vom dyn. Array Profilspeicher einzustellen?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Bekomme einfach kein globales "Array of Record"

  Alt 30. Sep 2009, 12:35
??? = Profilspeicher
du willst ja wohl diesen ändern

dieses SetLength gehört natürlich in eine Methode von TSpeicher



aber du gehst da komplett falsch ran, denn so kannst du nur ganze TProfil auslesen und vorallem ändern

Speicher.PProfilspeicher[i].Wert läßt sich zwar auslesen, aber nicht so setzen, da hier Get aufgerufen und der Record geholt würde, in welchem du zwar was ändern könntest, aber dieses wird danach dann wieder verworfen, da der Record nicht via Put zurückgespeichert würde.
Es wird immer nur jeweils einwas Put oder Get von Delphi aufgerufen ... nicht Beides!

PS: gehen würde es, wenn TProfil ein Object und kein Record wäre, da dort die Objekt-Variable und nicht das Objekt solber geliefert würde. (dort gibt es zwar kein PUT, aber das wäre nicht nötig, da ja direkt auf das Objekt zugegriffen würde und nicht auf eine Kopie, wie beim Record)

So hast du zugriff auf alle Felder und kannst diese auch ändern
Delphi-Quellcode:
TProfil = record
    Name, Option1, Option2 : String;
    Wert: integer;
  end;

TSpeicher = class
  private
    FProfilspeicher: Array of TProfil;
    FObjektspeicher: Array of TObject;
    function GetName(Index: Integer): TProfil;
    procedure PutName(Index: Integer; S: TProfil);
    ...
    procedure PutOption1(Index: Integer; S: TProfil);
  public
    Function Add(...): Integer; // Result ist dann der Index des Erstellten
    Procedure Delete(Index: Integer);
    property Name [index: integer]: String read GetName write PutName;
    property Option1[index: integer]: String read GetOption1 write PutOption1;
    property Option2[index: integer]: String read GetOption2 write PutOption2;
    property Wert [index: integer]: integer read GetWert write PutWert;

    property Objekt [index: integer]: TObject read GetObject;
  end;
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 06:39 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