![]() |
Array und negativ werte.
Ich möchte ein Array mit negativ werten anlegen.
bsp.
Delphi-Quellcode:
const
a = -1; b = -2; c = -3; d = -4; e = -5; type Sprite = record x: Integer; y: Integer; w: Integer; h: Integer; visible: Bool; end; TSprite = Sprite; PSprite = ^TSprite; var sp: Array of TSprite
Delphi-Quellcode:
if sp[1].x < 40 then
sp[a].visible := true
Delphi-Quellcode:
//sp[a].visible.. Array < 0 gleicht [DCC Fehler] Konstantenausdruck verletzt untere Grenzen.
logisch aber wie kann ich das trotzdem verwirklichen? gruss |
AW: Array und negativ werte.
Super dumme Idee aber...
Delphi-Quellcode:
? :lol:
sp[(a*-1) - 1].visible := true
|
AW: Array und negativ werte.
Zitat:
Ich möchte das meine HÖCHSTEN werte 0 betragen.. Was ist da also Dumm dran? Es hat seine Berechtigung im weiteren Verlauf meines Codes. Du willst werte die Fest zugewiesen wurden (CONST) mit a*-1 verändern? LOL (dumme Idee) gruss |
AW: Array und negativ werte.
Zitat:
Zitat:
|
AW: Array und negativ werte.
Zitat:
Nur in dem Fall wenn ich das richtig verstehe könnte ich direkt die Const auf diese weise auslegen.
Delphi-Quellcode:
Das Problem dabei ist nur sp[0] ist das in der ZOrder am höchsten angeordnete Bitmap.
const
a = 1; b = 2; c = 3; d = 4; e = 5; Die anderen 4 müssen darunter liegen. Anderes bsp:
Delphi-Quellcode:
oder..
const
LBOUND = e // also -5 SetLength(sp, 1); // höchste Array Eintrag. "0" for x := LBOUND to High(sp) do begin if sp(x).hBitmap then begin DeleteObject(sp(x).hBitmap); sp[x].hBitmap := 0; end; end;
Delphi-Quellcode:
for I := -1 downto LBOUND do
Eventuell geht das mit Delphi nicht. Früher mit VB6 war das kein Problem. (Array mit - werten) Sollte es nicht gehen muss ich mir mit der ZOrder etwas anderes überlegen. gruss |
AW: Array und negativ werte.
Was willst du eigentlich damit erreichen?
|
AW: Array und negativ werte.
Zitat:
gruss |
AW: Array und negativ werte.
Du kannst doch das Problem mit den Indices "ausserhalb" der eckigen Klammern regeln.
Ich sehe hier keine Notwendigkeit negative Indices zu verwenden. Und wenn du's doch tun willst und du bereits jetzt weisst, dass du nur Elemente von -5..-1 unterbringen willst oder zum Beispiel von -10..10, dann verwende doch einfach einen statischen Array: sp : array[-10..10] of TSprite; Dann kann der Compiler das für dich regeln :-D. |
AW: Array und negativ werte.
Zitat:
Werde es mal testen. Zurück das geht nicht. -5 > 0 ist ein Array für die Bitmaps die ich zuweisen will. sp[x] kann aber größer werden.. abhängig von den Icons die auf den Desktop liegen. Werde wohl positive werte nehmen müssen.. Hmmm. Danke gruss |
AW: Array und negativ werte.
Nur so aus Neugierde... hast du mal Graphics32 verwendet? Oder schreibst du etwas für die fmx Welt?
|
AW: Array und negativ werte.
Zitat:
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 |
AW: Array und negativ werte.
Zitat:
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:
Vollkommen ungetestest. Zu verwenden wäre das dann so :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;
Delphi-Quellcode:
var a : TNegativeArray; begin a := TNegativeArray.Create(100); // Index läuft von -100 bis 0 a[-1] := Montag; end; |
AW: Array und negativ werte.
Zitat:
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:
definiert.
const
ID_LEFT = -1; ID_RIGHT = -2; Dann lade ich das Bitmap auf diese weise.
Delphi-Quellcode:
Nun das würde in VB6 funktionieren aber nicht in Delphi.
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); Deshalb ist meine Denkweise dahingehend wohl falsch. Das!
Delphi-Quellcode:
stellt kein Problem dar.
const
ID_LEFT = 1; ID_RIGHT = 2; Ja ich weis das ein Array in Delphi bei 0 anfängt. (Ich wollte es aber ändern) gruss |
AW: Array und negativ werte.
Zitat:
Delphi-Quellcode:
und verwende das ganze soTYPE 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;
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ö |
AW: Array und negativ werte.
Supi ja so könnte es gehen ;)
Danke für deine Mühe. werde es mal testen. gruss |
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 |
AW: Array und negativ werte.
Irgendwie will es nicht so recht.
Delphi-Quellcode:
Der linken Seite kann nichts zugewiesen werden.
procedure MoveIcon(Offset: integer);
var K: integer; begin for K := -1 downto LBOUND do sp[K].x := sp[K].x + Offset; end; wenn ich das property so auslege.
Delphi-Quellcode:
Data[index: Integer]: TSprite read getData write setData; default;
gruss |
AW: Array und negativ werte.
Zitat:
Delphi-Quellcode:
Stammte noch aus dem Beispiel davor. Korrekt wäre
Data[Index : Integer] : Irgendwas
Delphi-Quellcode:
getData und setData sind ja auch mit TSprite deklariert.
Data[Index : Integer] : TSprite read getData write setData; default;
Jetzt musst Du schon selbst weitermachen, ich muss los. cu Ha-Jö |
AW: Array und negativ werte.
Zitat:
cu Ha-Jö |
AW: Array und negativ werte.
Zitat:
Zitat:
gruss |
AW: Array und negativ werte.
Leider habe ich immer noch ein paar Probleme.
Ich habe die MaxValue definiert.
Delphi-Quellcode:
Die MaxValue überschreitet 0 nur dann wenn aLenght > 6 ist.
constructor TNegativeArray.Create(aLenght: Integer);
begin SetLength(fdata, aLenght); MaxValue := IIF(aLenght > 6, aLenght, 0); end; Also 0, -1, -2, -3, -4, -5 (MaxValue = 0) bei aLenght 7 = MaxValue = 1 usw.. Das zusätzliche Problem was ich noch habe wie soll ich die neue länge von Fdata zuweisen ohne das mein Sprite Array von -5 > 0 gelöscht wird. Normal habe ich es vorher mit SetLength zugewiesen. Wenn ich also ein Icon auf dem Desktop finde muss ich das Array erhöhen können.
Delphi-Quellcode:
Nochmal um das klar zu stellen ich verwende die Negativen werte ausschließlich für das Window
if CreateBarIcon(sIconSearch, nFound) then
begin inc(nCount); Setlength(gS, nCount); // funktioniert nicht mehr. alles was darüber geht ist für die Icons zuständig. Boahh... Zitat:
gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 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