Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

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)

EWeiss 2. Mai 2017 15:17

AW: die aufzurufende funktion wurde vom linker entfernt
 
Zitat:

Zitat von Ghostwalker (Beitrag 1369864)
Hier mal meine korregierte Variante mit Kommentaren :)

Schaus dir einfach mal an.

Kleiner Tip am Rande: In einer Debug-Konfiguration immer die Compileroptimierung abschalten :)

Auf jeden Fall werde ich mir Anschauen..
Danke.

gruss

EWeiss 2. Mai 2017 15:38

AW: die aufzurufende funktion wurde vom linker entfernt
 
Noch ein paar kleine Änderungen damit die Classe flexibel bleibt.

Rückgabe NIL addiert falls was schief läuft.

Delphi-Quellcode:
function TNegativeArray.getData(index: Integer): TSprite;
var
 idx : Integer;
begin
  result := nil;

  if ((index <= 0) or ((index > 0) and (Length(Fdata) > FMaxDefault ))) then
  begin
    idx := self.MappIndex(index);
    result := fdata[idx];
  end;
end;
create verändert keine festen werte mehr zuweisen.

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

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

  for I := 0 to aLenght do
    FData[i] := TSprite.Create;
end;
Der Rest im Anhang.

gruss

EWeiss 2. Mai 2017 16:58

AW: die aufzurufende funktion wurde vom linker entfernt
 
Noch eine Änderung.

Delphi-Quellcode:
procedure TNegativeArray.SetLen(Len: Integer);
var
  oldidx,i : Integer;

begin
  if ((Len + FMaxDefault) > Length(Fdata)) then
  begin
    //alte Länge = 1. neuer Index nach der vergrößerung
    oldidx := Length(Fdata);
    //Neue Länge (len = 1 entspricht neue größe 7 elemente also -5 bis 1
    SetLength(fData, Len + FMaxDefault);

    for i := oldidx to Length(Fdata)-1 do
    begin
      fdata[i] := TSprite.Create;
      MaxValue := IIF(i > (FMaxDefault - 1), (i - (FMaxDefault - 1)), 0);
    end;
  end;
end;
MaxValue muss hier aktualisiert werden.
Das ist deshalb wichtig weil alle Bitmaps > 0 (Icons) vorher gelöscht werden müssen.

Delphi-Quellcode:
  if gS.MaxValue > 0 then
  begin
    for K := 1 to gS.MaxValue do
    begin
      if gS[K].Bitmap <> 0 then
      begin
        DeleteObject(gS[K].Bitmap);
        gS[K].Bitmap := 0;
      end;
    end;
  end;
gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 Uhr.
Seite 7 von 7   « Erste     567   

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