Delphi-PRAXiS
Seite 3 von 7     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi die aufzurufende funktion wurde vom linker entfernt (https://www.delphipraxis.net/192566-die-aufzurufende-funktion-wurde-vom-linker-entfernt.html)

Olli73 1. Mai 2017 22:07

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von EWeiss (Beitrag 1369673)
Das Problem mit dieser Classe ist das ich NUR Negative Values addieren kann.

...

Hier wird das Array normalerweise redimensioniert.
Wenn gS positive werte bekommt sind sie am ende doch Negativ bedingt durch die Classe.

Das Array gS muss eine Kombination von Negativen und Positiven werten sein.
Da das aber nicht geht werde ich wohl oder übel wieder alles umbauen müssen.

Wer sagt, dass das nicht geht? Anstatt

Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin
  assert(index <= 0);
  result := fData[abs(index)];
end;
einfach z.B: das hier nehmen:

Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin
  if Index < 0 then
    result := fData[abs(index + 1) * 2 + 1]
  else
    result := fData[index*2];
end;
Edit: Quelltext angepasst, siehe unten.

EWeiss 1. Mai 2017 22:21

AW: die aufzurufende funktion wurde vom linker entfernt
 
Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
begin
  if Index < 0 then
     result := fData[abs(index + 1) * 2 + 1]
   else
   result := fData[index * 2];

  fData[abs(index)]; //[DCC Fehler] uSprite.pas(297): E2014 Anweisung erforderlich, aber Ausdruck vom Typ 'TSprite' gefunden
end;
Zusätzlich habe ich immer noch das Problem bei der Redimensionierung.

Delphi-Quellcode:
    if CreateBarIcon(sIconSearch, nFound) then
    begin
      inc(nCount);
      //Setlength(gS, nCount);
Irgendwie ein Anfang ohne Ende ;)

Denke mal
Zitat:

fData[abs(index)];
wird nicht mehr benötigt.


gruss

Olli73 1. Mai 2017 22:52

AW: die aufzurufende funktion wurde vom linker entfernt
 
Genau.
Delphi-Quellcode:
fData[abs(index)];
muss weg. Das stand da noch von vorher. Copy&Paste halt.

Für deine Dimensionierung (SetLength) machst du einfach eine Methode in die Klasse, die dies vornimmt;

Wenn dein TNegativeArray von -n..+n geht, musst du SetLength mit n*2+1 aufrufen;

EWeiss 1. Mai 2017 22:55

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Olli73 (Beitrag 1369700)
Genau.
Delphi-Quellcode:
fData[abs(index)];
muss weg. Das stand da noch von vorher. Copy&Paste halt.

Für deine Dimensionierung (SetLength) machst du einfach eine Methode in die Klasse, die dies vornimmt;

Wenn dein TNegativeArray von -n..+n geht, musst du SetLength mit n*2+1 aufrufen;

Kleines Beispiel muss sonst raten ;)
Danke.. wenn es funktioniert kann ich die vielleicht doch noch verwenden.

gruss

Olli73 1. Mai 2017 23:15

AW: die aufzurufende funktion wurde vom linker entfernt
 
Delphi-Quellcode:

  TNegativeArray = class(TObject)
    ...
  public
    ...
    procedure SetLen(n: Integer);

    property Data[index: Integer]: TSprite read getData write setData; default;
    property MaxValue: Integer read GetMaxValue write SetMaxValue;
  end;

procedure TNegativeArray.SetLen(n: Integer);
begin
  SetLength(fData, n*2+1);
end;
Dann kannst du dein Array mit
Delphi-Quellcode:
gs.SetLen(n) dimensionieren.

EWeiss 1. Mai 2017 23:23

AW: die aufzurufende funktion wurde vom linker entfernt
 
Danke werde es gleich mal testen. ;)

gruss

EWeiss 1. Mai 2017 23:39

AW: die aufzurufende funktion wurde vom linker entfernt
 
Hmmm...
Bei

Delphi-Quellcode:
gS[ID_BLUEFLARE].Bitmap :=
also Index -4 kracht es beim einlesen der Bitmap. :wall:
Delphi-Quellcode:
procedure TSprite.SetBitmap(const Value: HBitmap);
begin

  FBitmap := Value;
end;
Es sind alle Arrays mit TSprite.Create zugewiesen.
Das HBitmap handle was übergeben werden soll ist auch korrekt.
getData ist wieder nicht zugewiesen.

gruss

Olli73 1. Mai 2017 23:46

AW: die aufzurufende funktion wurde vom linker entfernt
 
Was gibst du denn beim Create für einen Wert für aLength an?

EWeiss 1. Mai 2017 23:49

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Olli73 (Beitrag 1369707)
Was gibst du denn beim Create für einen Wert für aLength an?

Delphi-Quellcode:
constructor TNegativeArray.Create(aLenght: Integer);
var
  i: Integer;
begin

  MaxValue := IIF(aLenght > 6, aLenght, 0);
  SetLength(FData, aLenght);

  for I := 0 to aLenght do
    FData[i] := TSprite.Create;
end;
Delphi-Quellcode:
gs := TNegativeArray.Create(6);


gruss

Olli73 1. Mai 2017 23:50

AW: die aufzurufende funktion wurde vom linker entfernt
 
6 ist auch zu wenig => n*2+1
Da du scheinbar mit 5 anfängst also 11.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 Uhr.
Seite 3 von 7     123 45     Letzte »    

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