Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Memeber Acces Operators in Delph (https://www.delphipraxis.net/18717-memeber-acces-operators-delph.html)

Virchov 23. Mär 2004 18:00


Memeber Acces Operators in Delph
 
Tach!


ich habe ein klitzekleines Prozedürchen in Delphi umzusetzen.
Da kommt dieses M.A.O. -> vor. Wie könnte das hier in Delphi aussehhen

Delphi-Quellcode:

void GetRGB(
  RGBTRIPLE* prgb,           //Pointer   to the pixel
  BYTE *R, BYTE *G, BYTE *B) //Output:   R, G and B
{
  *R=prgb->rgbtRed;
  *G=prgb->rgbtGreen;
  *B=prgb->rgbtBlue;
}
Also, die Deklaration ist mir klar, wie das geht, vielmehr interessiert mich die Umsetzung der 3 Zeilen zwischen den Klammern :gruebel:

Danke!

Virchov 23. Mär 2004 18:04

Re: Memeber Acces Operators in Delph
 
Vielleicht so:

*R=^prgb.rgbtRed;

??

Virchov 23. Mär 2004 18:15

Re: Memeber Acces Operators in Delph
 
Delphi-Quellcode:

 implementation
procedure GetRGB(
  prgb: pRGBTRIPLE;           //Pointer   to the pixel
  R,G,B: pBYTE);                         //Output:   R, G and B

  begin
  R^:=prgb.rgbtRed;
  G^:=prgb.rgbtGreen;
  B^:=prgb.rgbtBlue;
end;
Oder vielleicht So? :angle2:

Basilikum 23. Mär 2004 18:17

Re: Memeber Acces Operators in Delph
 
Code:
void GetRGB(
  RGBTRIPLE* prgb,          //Pointer  to the pixel
  BYTE *R, BYTE *G, BYTE *B) //Output:  R, G and B
{
  *R=prgb->rgbtRed;
  *G=prgb->rgbtGreen;
  *B=prgb->rgbtBlue;
}
Delphi-Quellcode:
Procedure GetRGB(Const prgb : PRGBTRIPLE;Var R,G,B : Byte);
Begin
  R:=prgb^.rgbtRed;
  G:=prgb^.rgbtGreen;
  B:=prgb^.rgbtBlue;
end;

Virchov 23. Mär 2004 18:19

Re: Memeber Acces Operators in Delph
 
Zitat:

Zitat von Virchov
Delphi-Quellcode:

 implementation
procedure GetRGB(
  prgb: pRGBTRIPLE;           //Pointer   to the pixel
  R,G,B: pBYTE);                         //Output:   R, G and B

  begin
  R^:=prgb.rgbtRed;
  G^:=prgb.rgbtGreen;
  B^:=prgb.rgbtBlue;
end;
Oder vielleicht So? :angle2:


Danke. Könntest Du mir vielleicht den Unterschied zwischen Deinem und meinem Ansatz erläutern? :wall:

Chewie 23. Mär 2004 18:21

Re: Memeber Acces Operators in Delph
 
@ Virchov: R, G und B sind Zeiger auf Byte-Werte. Du weist diesen Zeigern aber die Werte selbst zu, nicht die Adressen!

Basilikum 23. Mär 2004 18:24

Re: Memeber Acces Operators in Delph
 
während ich meinen Beitrag geschrieben habe, bist Du mit Deinem zuvorgekommen... grundsätzlich ist es das selbe... der Unterschied ist die Art der Wertrückgabe von R,G und B... in C verwendet man häufig Pointer (BYTE*) zur Wertrückgabe, während im Delphi dazu das VAR-Schlüsselwort verwendet werden kann... Du hast nun diese Art der Wertrückgabe übernommen, ich habe sie auf die Delphi-übliche Variante realisiert.... im Assembler-Code würden beide Ansätze nahezu identisch aussehen....

Virchov 23. Mär 2004 18:27

Re: Memeber Acces Operators in Delph
 
Zitat:

Zitat von Chewie
@ Virchov: R, G und B sind Zeiger auf Byte-Werte. Du weist diesen Zeigern aber die Werte selbst zu, nicht die Adressen!


Hmmm.
Verstehe ich Dich richtig:
^R ist ein Pointer auf Pointer auf pByte;
R ist ein Pointer auf pByte;
R^ ist die pByte- Variable, auf die der Pointer zeigt

Richtig? :oops:

Virchov 23. Mär 2004 18:32

Re: Memeber Acces Operators in Delph
 
Und das? Ich bin völlig verwirrt....
Delphi-Quellcode:
  R^:=prgb^.rgbtRed; ;
  G^:=prgb^.rgbtGreen;
  B^:=prgb^.rgbtBlue;
Ist das nicht dasselbe wie

Delphi-Quellcode:
  R:=prgb^.rgbtRed; ;
  G:=prgb^.rgbtGreen;
  B:=prgb^.rgbtBlue;
das hier? :duck:

Chewie 23. Mär 2004 19:07

Re: Memeber Acces Operators in Delph
 
@ Virchov: Also: R, G und B sind vom Typ PByte, das sollte ein Pointer auf einen Byte-Wert sein.

prgb ist ein Pointer pRGBTRIPLE. Dieses enthält wohl drei Byte-Werte.

Delphi-Quellcode:
R^:=prgb^.rgbtRed; ;
  G^:=prgb^.rgbtGreen;
  B^:=prgb^.rgbtBlue;
Zunächst: prgb^.rgbtRed ist das gleiche wie prgb.rgbtRed.
Du weißt also der Speicherstelle, auf die R zeigt, den Wert von prgb.rgbtRed zu.

Delphi-Quellcode:
R:=prgb^.rgbtRed; ;
G:=prgb^.rgbtGreen;
B:=prgb^.rgbtBlue;
Hier weißt du der Variable R den Wert im Record zu.

Ich hab übrigens da oben Mist geschrieben, vergesst das.

Die Lösung von Basilikum entspricht allerdings der deinen, da er die Parameter als Referenz abruft. Dadurch kann er mit ihnen hantieren, als wären es Wertvariabeln, allerdings sind es Zeigervariablen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz