AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Setlength aufrufen von untergeordneter prozedur auf owner Klasse.
Thema durchsuchen
Ansicht
Themen-Optionen

Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

Ein Thema von gemy · begonnen am 3. Mär 2020 · letzter Beitrag vom 4. Mär 2020
Antwort Antwort
gemy

Registriert seit: 17. Feb 2019
34 Beiträge
 
#1

Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 3. Mär 2020, 09:36
Guten Morgen !

Ich habe ein Trecord in einer Klasse :

..
Code:
Torder = record
         private
                ...
                fMissed_points: currency;
                ...
               
                procedure SetMissedPoints (Value: currency);
                ...
        public
                property Missed_points : currency Read fMissed_points Write SetMissedPoints;
end;

Tpattern = class(Tobject)
          PRIVATE
          fMedArr: array of currency;
          ...


   PUBLIC { Public-Deklarationen }
          OrderItems   : array of Torder;

nun befinde ich mich im Aufruf :
Code:
procedure Torder.SetMissedPoints(const Value: currency);
var i : integer;
begin
 self.fMissed_points := Value;
 Setlength(

//
end;
Wie kann ich von Torder.SetMissedPoints das Setlength auf fMedArr aufrufen ? quasi so: setlength(übergeordneteklasse.fMedarr,1); ? (das muss auch sicher sein wenn ich meine Klasse mehrmals erstelle). Irgendwie so muss das ausehen SetLength(tpattern.self.fmedarr,1). Ich komm aber leider nicht drauf.


Danke für eure Hilfe !
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 3. Mär 2020, 10:04
Nur dass ich die Struktur richtig verstanden habe: Du hast beliebig viele TOrder-Records die in einem TPattern stecken. Wenn man auf einem TOrder SetMissedPoints(..) aufruft soll der hingehen und auf dem TPattern in dem er steckt Dinge ändern?

New Anttizen Diagram.png

Wenn ja, dann fehlt deinem TOrder eine Referenz auf das TPattern in dem es steckt. Es weiß ja momentan gar nicht, worin es steckt. Dir fehlt also ein Feld in deinem TOrder das auf das TPattern-Objekt zeigt.
  Mit Zitat antworten Zitat
gemy

Registriert seit: 17. Feb 2019
34 Beiträge
 
#3

AW: Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 3. Mär 2020, 10:11
Genau so ist es. In OrderItems habe ich z.B. 100 Einträge. Ergo 100 mal ->(fMissed_points: currency

Nun will ich die 100 Werte von dem OrderItems array in die übergeordnete Klasse Tpattern in ein array speichern um dort dann den median Wert der 100 Werte zu ermitteln.


Muss nun arbeiten gehen. Ich schreibe heute abend nochmal rein. Ich dachte mit
Code:
   PUBLIC { Public-Deklarationen }

          OrderItems   : array of Torder;
weis Torder von wem es abstammt.

Geändert von gemy ( 3. Mär 2020 um 10:25 Uhr)
  Mit Zitat antworten Zitat
gemy

Registriert seit: 17. Feb 2019
34 Beiträge
 
#4

AW: Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 3. Mär 2020, 20:34
Hallo nochmal

habe jetzt ewig rumprobiert, aber ich bekomme es nicht gebacken. Sogar wenn ich es so mache geht es nicht :

Code:
Tpattern = class(Tobject)
        PRIVATE TYPE
                 Torder = record
                       
                        fMissed_points: currency;

                       
                        procedure SetMissedPoints (val : currency);
                       
        PUBLIC
                        property Missed_points : currency Read fMissed_points Write SetMissedPoints;
        end;


 PRIVATE


 fMedArr: array of currency;


  PUBLIC { Public-Deklarationen }
  OrderItems   : array of Torder;
  procedure MedArr(const Value: currency);



end;

Code:
procedure Tpattern.MedArr(const Value: currency);
var temp: integer;
begin
temp := Length(self.fMedArr)-1;
SetLength(self.fMedArr, temp);
self.fMedArr[temp] := Value;
end;
Code:
procedure Tpattern.Torder.SetMissedPoints(val: currency);
var i : integer;
begin
self.fMissed_points := val;
//Zugriff auf Tpattern.MedArr(const Value: currency) geht nicht.

end;


Egal wie ich es drehe oder wende, ich komme von innen nicht nach ausen um vom Record aus auf die übergeordnete Klasse das SetLenght zu verwenden.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 3. Mär 2020, 23:19
Kleine Anmerkung zu deinen Settern und Gettern:
property Missed_points : currency Read fMissed_points Write SetMissedPoints; Das ist etwas inkonsistent, da die Benennung vom Schema unterschiedlich ist. Beim Getter fehlt das Get und einmal trennst du mit Unterstrichen und das andere Mal mit Großbuchstaben. So viel ich weiß, ist die Benutzung von Unterstrichen in der Benennung von Prozeduren und Variablen in Delphi eher unüblich. Und in C und C++ üblich. Und konsequenter wäre auch eine Prozedur für den Getter. So macht man es auch normaler Weise.
Besser wäre:
property MissedPoints : currency Read GetMissedPoints Write SetMissedPoints; Eine einheitliche Benennung macht den Code auch einfacher lesbar.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.305 Beiträge
 
Delphi 12 Athens
 
#6

AW: Setlength aufrufen von untergeordneter prozedur auf owner Klasse.

  Alt 4. Mär 2020, 07:38
Kleine Anmerkung zu deinen Settern und Gettern:
property Missed_points : currency Read fMissed_points Write SetMissedPoints; Das ist etwas inkonsistent, da die Benennung vom Schema unterschiedlich ist. Beim Getter fehlt das Get und einmal trennst du mit Unterstrichen und das andere Mal mit Großbuchstaben. So viel ich weiß, ist die Benutzung von Unterstrichen in der Benennung von Prozeduren und Variablen in Delphi eher unüblich. Und in C und C++ üblich. Und konsequenter wäre auch eine Prozedur für den Getter. So macht man es auch normaler Weise.
Besser wäre:
property MissedPoints : currency Read GetMissedPoints Write SetMissedPoints; Eine einheitliche Benennung macht den Code auch einfacher lesbar.
Bezüglich der einheitlichen Schreibweisen (einmal mit Unterstrich, einmal Ohne) volle Zustimmung. Die Schreibweise sollte gleich bleiben.

Aber warum sollte ein Getter zugefügt werden, wenn dort gar kein weiterer Code ausgeführt wird? Selbst die Codevervollständigung von Delphi erzeugt ein privates Feld und verwendet dies direkt statt einem Getter.

Ich gehe sogar so weit und entferne auch die Setter-Procedure, wenn dort kein Code ausgeführt wird.

property MissedPoints:currency read fMissedPoints write fMissedPoints;

Ich vermeide somit unnützen Code und sehe sofort im Interface-Abschnitt, ob der Setter zusätzlichen Code beinhaltet.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  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 04:28 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