Delphi-PRAXiS
Seite 2 von 7     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ 2 Arrays vergleichen\sortieren (https://www.delphipraxis.net/194449-2-arrays-vergleichen%5Csortieren.html)

EWeiss 22. Nov 2017 15:25

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von TiGü (Beitrag 1386885)
Du hast da einen grundlegenden Denkfehler und/oder Verständnisproblem.
Aber ich weiß nicht wie man es dir erklären kann, ohne das es gleich wieder ausartet oder man ein kindisches LOL erhält. :(

Denke ich auch sonst müsste ich nicht hier Nachfragen ;)

Versuch es einfach.
Verspreche nicht zu meckern. ;)

gruss

TiGü 22. Nov 2017 15:27

AW: 2 Arrays vergleichen\sortieren
 
Am Besten zeigst du uns einfach den Aufruf von SortShortTagArray im C++ Quelltext.
Damit man mal den Kontext sieht. Sonst ist es wieder nur Glaskugelwischen.
:glaskugel:

EWeiss 22. Nov 2017 15:32

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von TiGü (Beitrag 1386888)
Am Besten zeigst du uns einfach den Aufruf von SortShortTagArray im C++ Quelltext.
Damit man mal den Kontext sieht. Sonst ist es wieder nur Glaskugelwischen.
:glaskugel:

Hier.. Danke.
Die Sort Funktion war hier..
http://www.delphipraxis.net/1386876-post5.html

btw.. Es soll niemand für mich übersetzen benötige nur Hilfestellungen. :)


Code:
long GetObjectOrder (IN HWND hParent) {

    long pZP = gPropertyItem(hParent);
    if (pZP > -1) {
        if (g_Prop[pZP].ordersize) {
            return pZP;
        }
    }

    long UB = UBOUND(g_zObj);
    if (UB > 0) {
        long K = 0, nCount = 0;
        vector<short> A1(UB), A2(UB);
        for (K = 0; K < UB; K++) {
            if (g_zObj[K].hwnd == hParent) {
                A1[nCount] = (short) (g_zObj[K].order); A2[nCount] = (short) (K);
                nCount += 1;
            }
        }
        //ARRAY SORT A1() FOR nCount, TAGARRAY A2();
        SortShortTagArray (A1, A2, nCount); // hier!

        char buffer[2048] = {0};
        for (K = 0; K < nCount; K++) {
            MoveMemory(&buffer[0] + K * sizeof(short) , &A2[K], sizeof(short));
        }
        A1.clear(); A2.clear();

        if (pZP < 0) {
            // REDIM PRESERVE g_Prop[1 TO pZP) AS ZIMAGEPROP
            pZP = (long) (UBOUND(g_Prop));
            g_Prop.resize(pZP + 1);
        }
        g_Prop[pZP].hWnd     = hParent;
        MoveMemory(&g_Prop[pZP].order, &buffer[0], sizeof(buffer));
        g_Prop[pZP].ordersize = nCount; // nCount * 2;
    }
    return pZP;
}
gruss

TiGü 22. Nov 2017 15:43

AW: 2 Arrays vergleichen\sortieren
 
Achte mal auf die Zeile:
Code:
vector<short> A1(UB), A2(UB);
Was für ein Datentyp liegt hier vor?

EWeiss 22. Nov 2017 15:44

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von TiGü (Beitrag 1386891)
Achte mal auf die Zeile:
Code:
vector<short> A1(UB), A2(UB);
Was für ein Datentyp liegt hier vor?

short (SmallInt) Delphi denk ich mal.

EDIT:
Aber wenn ich es so definiere bekomme ich keinen zugriff mehr auf die Variablen des Record.

Delphi-Quellcode:
A1[Count].Order := g_Obj[K].Order;

Würde dann nicht mehr funktionieren.
Zitat:

[DCC Fehler] uSpriteContainer.pas(2630): E2018 Record, Objekt oder Klassentyp erforderlich
gruss

Uwe Raabe 22. Nov 2017 15:57

AW: 2 Arrays vergleichen\sortieren
 
Ich bin jetzt nicht so der C++ Spezialist, aber für mich sieht das so aus, als enthalten die Arrays nicht die Records sondern A1 enthält jeweils das Order-Feld und A2 den Index des Records. Was dann allerdings damit passiert entzieht sich noch meinem Verständnis. Da mögen doch jetzt besser die C++ Cracks ran - das ist dann nichts für mich.

EWeiss 22. Nov 2017 16:09

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1386893)
Ich bin jetzt nicht so der C++ Spezialist, aber für mich sieht das so aus, als enthalten die Arrays nicht die Records sondern A1 enthält jeweils das Order-Feld und A2 den Index des Records. Was dann allerdings damit passiert entzieht sich noch meinem Verständnis. Da mögen doch jetzt besser die C++ Cracks ran - das ist dann nichts für mich.

Trotzdem Danke für deine Hilfe ;)
Habe noch Hoffnung das Zacherl mal drüber schaut wenn er zeit dafür findet.

Es sieht so aus das er nach der ID sortiert.
Sicher bin ich mir jedoch nicht.

Zitat:

I am using it to sort a secondary array in the same order than the main one.
it is used for sorting the z-order of the sprites unique ID.
Es soll so funktionieren wie wenn man eine ListBox sortiert über
Zitat:

That works the same than using a sorted LISTBOX with LB_SETITEMDATA or LB_GETITEMDATA,
gruss

Zacherl 22. Nov 2017 19:53

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von EWeiss (Beitrag 1386894)
Zitat:

Zitat von Uwe Raabe (Beitrag 1386893)
Ich bin jetzt nicht so der C++ Spezialist, aber für mich sieht das so aus, als enthalten die Arrays nicht die Records sondern A1 enthält jeweils das Order-Feld und A2 den Index des Records. Was dann allerdings damit passiert entzieht sich noch meinem Verständnis. Da mögen doch jetzt besser die C++ Cracks ran - das ist dann nichts für mich.

Trotzdem Danke für deine Hilfe ;)
Habe noch Hoffnung das Zacherl mal drüber schaut wenn er zeit dafür findet.

Es sieht so aus das er nach der ID sortiert.

Stimme Uwe zu. Sortiert wird letztlich über
Delphi-Quellcode:
g_zObj[K].order
, wie ich das sehe.
Delphi-Quellcode:
A1
scheint jeweils die `order` und
Delphi-Quellcode:
A2
den dazugehörigen Index zu enthalten.

EWeiss 22. Nov 2017 20:03

AW: 2 Arrays vergleichen\sortieren
 
Zitat:

Zitat von Zacherl (Beitrag 1386904)
Zitat:

Zitat von EWeiss (Beitrag 1386894)
Zitat:

Zitat von Uwe Raabe (Beitrag 1386893)
Ich bin jetzt nicht so der C++ Spezialist, aber für mich sieht das so aus, als enthalten die Arrays nicht die Records sondern A1 enthält jeweils das Order-Feld und A2 den Index des Records. Was dann allerdings damit passiert entzieht sich noch meinem Verständnis. Da mögen doch jetzt besser die C++ Cracks ran - das ist dann nichts für mich.

Trotzdem Danke für deine Hilfe ;)
Habe noch Hoffnung das Zacherl mal drüber schaut wenn er zeit dafür findet.

Es sieht so aus das er nach der ID sortiert.

Stimme Uwe zu. Sortiert wird letztlich über
Delphi-Quellcode:
g_zObj[K].order
, wie ich das sehe.
Delphi-Quellcode:
A1
scheint jeweils die `order` und
Delphi-Quellcode:
A2
den dazugehörigen Index zu enthalten.

Wie würde das dann aussehen.. Sorry ;)

gruss

Zacherl 22. Nov 2017 20:53

AW: 2 Arrays vergleichen\sortieren
 
Sollte in etwa so aussehen. Ist nur so runtergetippt, also kann noch Fehler enthalten:
Delphi-Quellcode:
function GetObjectOrder(hParent: HWND): LongInt;
var
  pZP, UB, K, nCount: LongInt;
  A1, A2: TArray<ShortInt>;
  buffer: array[0..2048 - 1] of Byte;
begin
  pZP := gPropertyItem(hParent);
  if (pZP > -1) then
  begin
    if (g_Prop[pZP].ordersize > 0) then
    begin
      Exit(pZP);
    end;
  end;

  UB = UBOUND(g_zObj);
  if (UB > 0) then
  begin
    K = 0;
    nCount := 0;
    SetLength(A1, UB);
    SetLength(A2, UB);
    for K := 0 to UB - 1 do
    begin
      if (g_zObj[K].hwned = hParent) then
      begin
        A1[nCount] := SmallInt(g_zObj[K].order);
        A2[nCount] := SmallInt(K);
        nCount := nCount + 1;
      end;
    end;

    SortShortTagArray(A1, A2, nCount);

    ZeroMemory(@buffer[0], SizeOf(buffer));
    for K := 0 to nCount - 1 do
    begin
      CopyMemory(PByte(@buffer[0]) + K * SizeOf(SmallInt), @A2[K], SizeOf(ShortInt));
    end;
    SetLength(A1, 0);
    SetLength(A2, 0);

    if (pZP < 0) then
    begin
      pZP := LongInt(UBOUND(g_Prop));
      g_Prop.resize(pZP + 1);
    end;
    g_Prop[pZP].hWnd := hParent;
    CopyMemory(@g_Prop[pZP].order, @buffer[0], SizeOf(buffer));
    g_Prop[pZP].ordersize := nCount;
  end;
  Result := pZP;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.
Seite 2 von 7     12 34     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