Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Records per Prozedur übergeben (https://www.delphipraxis.net/61851-records-per-prozedur-uebergeben.html)

K-Asche 27. Jan 2006 08:58


Records per Prozedur übergeben
 
Hi @ all,

wie übergeb ich denn ein Record über eine Prozedur?

Gruß

Karsten

Schaedel 27. Jan 2006 09:11

Re: Records per Prozedur übergeben
 
Schreib mal mehr dazu :wiejetzt:

K-Asche 27. Jan 2006 09:14

Re: Records per Prozedur übergeben
 
Ich habe eine Prozedur in einem Frame und einrecord in einer Form, die diesen Frame aufruft.
In der Form wird das Record mit Werten gefüllt und bei Aufruf des Frames soll der Record per Prozedur an das Frame übergeben werden.

z. B.
procedure Frame.execute(value : Record);

In Form der Aufruf
execute(FRecord);

Schaedel 27. Jan 2006 09:19

Re: Records per Prozedur übergeben
 
Versuchs doch mit einem Property ...

turboPASCAL 27. Jan 2006 09:20

Re: Records per Prozedur übergeben
 
Delphi-Quellcode:
type TMyRecord = Record
       VarStr: String;
       VarByt: Byte;
       //...
     end;

var
  MyRec: TMyRec;

procedure Foo(ValueRec: TMyRec);
var aString : String;
begin
  aString := ValueRec.VarStr;
  //...
end;

function Bla: TMyRec;
begin
  Result.VarStr := 'Hello';
end;

procedure Init...
begin
  MyRec.VarStr := 'Hallo';
  //...
   
  Foo(MyRec);
  //...
  ShowMessage( PChar(Bla.VarStr) );
end;

K-Asche 27. Jan 2006 09:38

Re: Records per Prozedur übergeben
 
Bei Beiden , Procedure und Property, bekomm ich bei der Übergabe des Records die Meldung, Inkompatiple Typen Form.Record und Frame.Record.
Hab aber den Record in beiden angelegt. Sind beide genau Identisch.

tomsel 27. Jan 2006 09:57

Re: Records per Prozedur übergeben
 
Zitat:

Sind beide genau Identisch
Nee, eben nicht!

Ferber 27. Jan 2006 10:03

Re: Records per Prozedur übergeben
 
Ich ahne was du willst.
Mach dir am besten eine separate Unit in der du die benötigten Type (Records, etc) definierst.

K-Asche 27. Jan 2006 10:10

Re: Records per Prozedur übergeben
 
@Tomsel

Warum nicht?

Schaedel 27. Jan 2006 10:12

Re: Records per Prozedur übergeben
 
Wie wärs mal mit ein wenig Quelltext? :?: :dance:

tomsel 27. Jan 2006 10:21

Re: Records per Prozedur übergeben
 
Zitat:

Zitat von K-Asche
@Tomsel

Warum nicht?

Du hast zwei verschiedene Records angelegt, wie du selbst sagst. Beide mögen zwar den selben Aufbau haben, sie sind aber trotzdem VERSCHIEDEN.

Du benötigst für deine Zwecke einen Record-Typ und in Form und Frame je eine Variable dieses Recordtyps. Auf den TYP kommt es an, nicht auf den Aufbau.

DGL-luke 27. Jan 2006 13:31

Re: Records per Prozedur übergeben
 
wenn sie exakt gleich aufgebaut sind, kann man sie auch hin- und hercasten ;)

Delphi-Quellcode:
type
  Trec1 = record
    num: integer;
  end;
  Trec2 = record
    num: integer;
  end;

var r1: TRec1; r2: TRec2
begin
r1.num := 5;
TRec1((@r2)^) := r1; //wie ging das gleich nochmal mit den Pointern?
//r2.num sollte jetzt 5 sein
end;
Ist aber NICHT zu empfehlen. Wenn du von einer Unit auf eine prozedur in der anderen zugreifen kannst, sollte auch der Typ verfügbar sein.

Elvis 27. Jan 2006 13:52

Re: Records per Prozedur übergeben
 
Zitat:

Zitat von DGL-luke
wenn sie exakt gleich aufgebaut sind, kann man sie auch hin- und hercasten ;)

Au, das tut so weh...
Das geht bis zu dem Moment in dem man es mit .Net probiert, welches eine typensichere Umgebung ist. Da ist ein Wert immer das was er vorgibt zu sein...

Wie Tomsel bereits schrieb: Einfach eine 3. Unit anlegen, in der dein Typ definiert wird. Units 1 & 2 können dann diesen benutzen. Kein Hack-Around, Gefriemel und sonstige "interessante" Abenteuer...


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