Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Array und negativ werte. (https://www.delphipraxis.net/192551-array-und-negativ-werte.html)

EWeiss 30. Apr 2017 16:40

AW: Array und negativ werte.
 
Zitat:

Zitat von Michael II (Beitrag 1369504)
Nur so aus Neugierde... hast du mal Graphics32 verwendet? Oder schreibst du etwas für die fmx Welt?

Nein ;)
Ich schreibe eine Anwendung in der beim start
alle auf dem Desktop befindliche Verknüpfungen versteckt und dann zu einer Bar addiert werden.

Ich arbeite mit GDIPlus ohne Fremdkomponente.

gruss

hanvas 30. Apr 2017 18:03

AW: Array und negativ werte.
 
Zitat:

Zitat von EWeiss (Beitrag 1369493)
Ich möchte ein Array mit negativ werten anlegen.

Geht es Dir daraum das dass Array tatsächlich negative Indicies unterstützt - das geht nicht - oder nur um den Zugriff darauf?

Du könntest die Indicies entweder mit einer (inline) Funktion mappen oder das Array in eine Klasse / Record packen.

Also ungefähr so :

Delphi-Quellcode:

TYPE irgendwas = (Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag);

     TNegativeArray = class(TObject)
     private
      maxVal : Integer;
      fdata : array of irgendwas;

      function getData(index : Integer) : irgendwas; inline;
      procedure setData(index : Integer; aData : irgendwas); inline;
     public
      Constructor Create(aLenght : Integer);
      Destructor Destroy; override;
     property
       Data [ index : Integer ] : Irgendwas
         read getData write setData; default;
     end;

implementation

function TNegativeArray.getData(index : Integer) : irgendwas;
begin
 assert(index<=0);
 result := fData[abs(index)];
end;

procedure TNegativeArray.setData(index : Integer; aData : irgendwas);
begin
 assert(index<=0);
 fData[abs(index] := aData;
end;
Vollkommen ungetestest. Zu verwenden wäre das dann so :

Delphi-Quellcode:

var a : TNegativeArray;

begin
 a    := TNegativeArray.Create(100); // Index läuft von -100 bis 0
 a[-1] := Montag;
end;

EWeiss 30. Apr 2017 18:11

AW: Array und negativ werte.
 
Zitat:

das geht nicht
ja in Delphi in VB6 schon so wie ich mich noch erinnern kann.

Danke. Die Idee ist nicht schlecht ;)
Aber!

Ich kann "a" nicht als TNegativeArray definieren..
Denn "a" ist schon als a: TSprite (Record) definiert. (wobei "a" nur ein Beispiel hier verwendet wird)

Sagen wir mal ich habe ein Bitmap das sich Links auf meiner Form befindet.
Der Index für dieses Bitmap ist mit
Delphi-Quellcode:
const
  ID_LEFT = -1;
  ID_RIGHT = -2;
definiert.

Dann lade ich das Bitmap auf diese weise.
Delphi-Quellcode:
  sp[ID_LEFT].x := 0;
  sp[ID_LEFT].y := YMIN_SIZE - 25;
  sp[ID_LEFT].opacity := 128;
  sp[ID_LEFT].Bitmap := SKAERO_CreateBitmapFromFile(FolderResource + 'Left.png',
    sp[ID_LEFT].w, sp[ID_LEFT].h);
Nun das würde in VB6 funktionieren aber nicht in Delphi.
Deshalb ist meine Denkweise dahingehend wohl falsch.
Das!
Delphi-Quellcode:
const
  ID_LEFT = 1;
  ID_RIGHT = 2;
stellt kein Problem dar.
Ja ich weis das ein Array in Delphi bei 0 anfängt. (Ich wollte es aber ändern)

gruss

hanvas 30. Apr 2017 19:00

AW: Array und negativ werte.
 
Zitat:

Zitat von EWeiss (Beitrag 1369512)
Danke. Die Idee ist nicht schlecht ;)
Aber!

Ich kann "a" nicht als TNegativeArray definieren..
Denn "a" ist schon als a: TSprite (Record) definiert.

Dann schreib halt irgendeinen anderen Bezeichner hin. Da du SP verwendest schreib halt

Delphi-Quellcode:

TYPE TSprite = record
      x: Integer;
      y: Integer;
      w: Integer;
      h: Integer;
      visible: Bool;
     end;

     TNegativeArray = class(TObject)
     private
      maxVal : Integer;
      fdata : array of TSprite;

      function getData(index : Integer) : TSprite; inline;
      procedure setData(index : Integer; aData : TSprite); inline;
     public
      Constructor Create(aLenght : Integer);
      Destructor Destroy; override;
     property
       Data [ index : Integer ] : Irgendwas
         read getData write setData; default;
     end;

implementation

Constructor TNegativeArray.Create(aLenght : Integer);
begin
 inherited;
 SetLength(fdata,aLength);
end;


function TNegativeArray.getData(index : Integer) : TSprite;
begin
 assert(index<=0);
 result := fData[abs(index)];
end;

procedure TNegativeArray.setData(index : Integer; aData : TSprite);
begin
 assert(index<=0);
 fData[abs(index] := aData;
end;
und verwende das ganze so

Delphi-Quellcode:

const
  ID_LEFT = -1;
  ID_RIGHT = -2;

var sp : TNegativeArray; // Sprite Stack

begin
 sp := TNegativeArray.Create(3); // Hat Element -1, -2 _und_ 0
 sp[ID_LEFT].x := 0;
 ....
end.

cu Ha-Jö

EWeiss 30. Apr 2017 19:06

AW: Array und negativ werte.
 
Supi ja so könnte es gehen ;)
Danke für deine Mühe.

werde es mal testen.

gruss

EWeiss 30. Apr 2017 19:17

AW: Array und negativ werte.
 
Habe es mal eingebaut.

Delphi-Quellcode:
Data[index: Integer]: Variant read getData write setData; default;


Hoffe mal das Variant korrekt ist.

Allerdings bekomme ich Fehler

Create inherited entfernt.. [DCC Fehler] E2008 Inkompatible Typen
getData.. [DCC Fehler] E2008 Inkompatible Typen
setData.. [DCC Fehler] E2008 Inkompatible Typen

Hmm ja getData TSprite

sollte dann wohl so aussehen.
Delphi-Quellcode:
Data[index: Integer]: TSprite read getData write setData; default;

gruss

EWeiss 30. Apr 2017 19:39

AW: Array und negativ werte.
 
Irgendwie will es nicht so recht.

Delphi-Quellcode:
procedure MoveIcon(Offset: integer);
var
  K: integer;
begin
  for K := -1 downto LBOUND do
    sp[K].x := sp[K].x + Offset;

end;
Der linken Seite kann nichts zugewiesen werden.

wenn ich das property so auslege.
Delphi-Quellcode:
Data[index: Integer]: TSprite read getData write setData; default;


gruss

hanvas 30. Apr 2017 19:49

AW: Array und negativ werte.
 
Zitat:

Zitat von EWeiss (Beitrag 1369532)
Habe es mal eingebaut.

Delphi-Quellcode:
Data[index: Integer]: Variant read getData write setData; default;
Hoffe mal das Variant korrekt ist.

Nein ist es nicht. Das

Delphi-Quellcode:
 Data[Index : Integer] : Irgendwas
Stammte noch aus dem Beispiel davor. Korrekt wäre

Delphi-Quellcode:
 Data[Index : Integer] : TSprite read getData write setData; default;
getData und setData sind ja auch mit TSprite deklariert.

Jetzt musst Du schon selbst weitermachen, ich muss los.

cu Ha-Jö

hanvas 30. Apr 2017 19:55

AW: Array und negativ werte.
 
Zitat:

Zitat von EWeiss (Beitrag 1369534)
Irgendwie will es nicht so recht.

Delphi-Quellcode:
procedure MoveIcon(Offset: integer);
var
  K: integer;
begin
  for K := -1 downto LBOUND do
    sp[K].x := sp[K].x + Offset;

end;
Der linken Seite kann nichts zugewiesen werden.

wenn ich das property so auslege.
Delphi-Quellcode:
Data[index: Integer]: TSprite read getData write setData; default;
gruss

Mach aus TSprite eine Klasse anstelle eines Records dann gehts.

cu Ha-Jö

EWeiss 30. Apr 2017 20:00

AW: Array und negativ werte.
 
Zitat:

Nein ist es nicht. Das
Deshalb hatte ich es aus kommentiert da ich selbst darauf gekommen bin :)

Zitat:

Mach aus TSprite eine Klasse anstelle eines Records dann gehts.
Ok werde es testen ;)

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.
Seite 2 von 3     12 3      

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