Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Item aus einem Record als Parameter einer Prozedur? (https://www.delphipraxis.net/153936-item-aus-einem-record-als-parameter-einer-prozedur.html)

DeddyH 20. Aug 2010 19:20

AW: Item aus einem Record als Parameter einer Prozedur?
 
Zitat:

Zitat von mkinzler (Beitrag 1043842)
So einfach gar nicht. Da müsste man tief in die RTTI-Trickkiste greifen

Funktioniert RTTI denn überhaupt bei Records?

mkinzler 20. Aug 2010 19:22

AW: Item aus einem Record als Parameter einer Prozedur?
 
Oder noch besser mit (Integer-)Konstanten, welche du dann mit Case abfragen kannst

DeddyH 20. Aug 2010 19:24

AW: Item aus einem Record als Parameter einer Prozedur?
 
Ich würde einen Enum-Type erstellen und den übergeben. Ist aber wahrscheinlich Geschmackssache.

himitsu 20. Aug 2010 19:25

AW: Item aus einem Record als Parameter einer Prozedur?
 
Da soein Record fest ist, könnte man über CASE jeweils andere Vergleiche ausführen (ala mkinzler).

Oder man bastelt sich einen Vergleich-Callback.
(diesen kann man entweder von extern übergeben, in einer Arraykonstante ablegen oder am Prozeduranfang über CASE auswählen)

rollstuhlfahrer 21. Aug 2010 09:48

AW: Item aus einem Record als Parameter einer Prozedur?
 
eigentlich meinte ich es etwa so:

Delphi-Quellcode:
type
  TVergleichsfunktion = function(Item1, Item2: TMyRecord): Integer;

TKlasse.Sort(Vergleichsfunktion: TVergleichsfunktion);
var
  i, j, k: Integer;
  temp: TPerson;
begin
  for i := 1 to Length(index) - 1 do
  begin
    j := i;
    while not (j = 0) do
    begin
      if Vergleichsfunktion(index[j-i], index[j]) >= 1 then
//...
end;
Dann brauchst du nur noch für jedes Element des Records eine Vergleichsfunktion. Für Zahlen könnte die so aussehen:
[delphi]function VergleicheZahlen(Item1, Item2: TMyRecord): Integer;
begin
Result := Item2.IntProperty - Item1.IntProperty;
end;[/dephi]

RTTI wird hier wohl nicht gehen, weil sich diese Variante vornehmlich auf einen Datentyp beschränkt. Du hast aber Integer, Real & String.

Bernhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Seite 2 von 2     12   

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