![]() |
AW: 2 Arrays vergleichen\sortieren
Zitat:
Versuch es einfach. Verspreche nicht zu meckern. ;) gruss |
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: |
AW: 2 Arrays vergleichen\sortieren
Zitat:
Die Sort Funktion war hier.. ![]() btw.. Es soll niemand für mich übersetzen benötige nur Hilfestellungen. :)
Code:
gruss
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; } |
AW: 2 Arrays vergleichen\sortieren
Achte mal auf die Zeile:
Code:
Was für ein Datentyp liegt hier vor?
vector<short> A1(UB), A2(UB);
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
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:
|
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.
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
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:
Zitat:
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
Delphi-Quellcode:
, wie ich das sehe.
g_zObj[K].order
Delphi-Quellcode:
scheint jeweils die `order` und
A1
Delphi-Quellcode:
den dazugehörigen Index zu enthalten.
A2
|
AW: 2 Arrays vergleichen\sortieren
Zitat:
gruss |
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 02:17 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 by Thomas Breitkreuz