AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

2 Arrays vergleichen\sortieren

Ein Thema von EWeiss · begonnen am 22. Nov 2017 · letzter Beitrag vom 30. Nov 2017
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:25
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#12

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:27
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:32
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.
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

Geändert von EWeiss (22. Nov 2017 um 16:39 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:43
Achte mal auf die Zeile:
Code:
vector<short> A1(UB), A2(UB);
Was für ein Datentyp liegt hier vor?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:44
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.

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

Geändert von EWeiss (22. Nov 2017 um 16:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#16

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 16:57
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 17:09
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

Geändert von EWeiss (22. Nov 2017 um 18:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#18

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 20:53
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 g_zObj[K].order , wie ich das sehe. A1 scheint jeweils die `order` und A2 den dazugehörigen Index zu enthalten.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#19

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 21:03
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 g_zObj[K].order , wie ich das sehe. A1 scheint jeweils die `order` und A2 den dazugehörigen Index zu enthalten.
Wie würde das dann aussehen.. Sorry

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#20

AW: 2 Arrays vergleichen\sortieren

  Alt 22. Nov 2017, 21:53
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;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 7     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
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