Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Tagarray (https://www.delphipraxis.net/194703-tagarray.html)

EWeiss 24. Dez 2017 00:19

Tagarray
 
Kennt sich vielleicht jemand mit PowerBasic aus?

Ich weis leider nicht wie ich das interpretieren soll bzw. nach welchen Kriterien hier sortiert wird.
Die Hilfe zu Powerbasic ist leider nicht Informativ genug.

Code:
%MAX_SORT        = 5
'-------
DIM x(1 TO %MAX_SORT ) AS LONG
DIM xx(1 TO %MAX_SORT ) AS LONG
ARRAY SORT x(), TAGARRAY xx()
gruss

Amateurprofi 24. Dez 2017 01:49

AW: Tagarray
 
Ich kenne mich mit PowerBasic auch nicht aus, aber weil jetzt Weihnachtszeit ist, hab ich mal gegoogelt nach powerbasic sort array

Vielleicht hilft das weiter.
https://forum.powerbasic.com/forum/a...sort-statement

EWeiss 24. Dez 2017 08:58

AW: Tagarray
 
Zitat:

Zitat von Amateurprofi (Beitrag 1389588)
Ich kenne mich mit PowerBasic auch nicht aus, aber weil jetzt Weihnachtszeit ist, hab ich mal gegoogelt nach powerbasic sort array

Vielleicht hilft das weiter.
https://forum.powerbasic.com/forum/a...sort-statement

Jo Danke..
Das wäre ja meine frage.
Code:
DIM Users$(100 TO 500), AcctNum&(100 TO 500)
ARRAY SORT Users$(), TAGARRAY AcctNum&()
Aber verstehe immer noch nicht nach welchen Kriterien sortiert wird.

A1 = 1,2,3,4,5
A2 = 1,2,3,4,5

Was und wie wird sortiert ?
Der Inhalt von A1 nach A2 oder A2 nach A1

Wenn A2 der Inhalt von Hinten nach vorn?
A2 nach A1 = 5,4,3,2,1

Hmmm...

gruss

p80286 24. Dez 2017 09:18

AW: Tagarray
 
Vorausgesetzt ich hab es richtig verstanden:

User$
1 Ben
2 willi
3 Monika
4 Zebulon
actnum
1 200
2 2
3 105
4 22

und nach dem sort:

1 Ben
2 Monika
3 Willi
4 Zebulon

1 200
2 105
3 2
4 22

Wenn Du so willst, wird User$ sortiert und Actnum wird entsprechend umsortiert.

Gruß
K-H

EWeiss 24. Dez 2017 09:42

AW: Tagarray
 
Danke dir..

Wenn deine Annahme nun richtig ist welche alternative könnte ich dann in Delphi
für diese Sortiermethode verwenden?

Vielleicht gibt es da ja was zu Weihnachten. ;)

gruss

Delphi.Narium 24. Dez 2017 12:20

AW: Tagarray
 
Meine Idee wäre da ein Array of Record.
Delphi-Quellcode:
type
  tTagRecord = record
    Name : String;
    Wert : Integer;
  end;
 
  tTagArray = Array[0..n] of tTagRecord;
Wenn man nun nach Name sortiert, hat man den zweiten Wert an der gleichen Position.

Alternative:
TStringList:
Delphi-Quellcode:
function AddObject(const S: string; AObject: TObject: Integer;

Dann kann man die mit Sort nach den Strings sortieren und die Objekte werden dann entsprechendf mitsortiert.

Eventuell mal hier schauen:

https://stackoverflow.com/questions/...sort-an-array#
https://www.entwickler-ecke.de/topic...n_21775,0.html

Könnten die als Ideenlieferanten dienen?

Bei Google suchenarray of record sort delphi source

EWeiss 24. Dez 2017 12:33

AW: Tagarray
 
Danke muss ich mal schauen.
Mein Problem ist die ZOrder.

Ich drehe Sprites im Kreis.
Damit das ansehnlich ist muss ich das Array sortieren so das die Sprites in ihre ZOrder neu ausgerichtet werden.

Scheint nicht so einfach zu sein.

Mit dem Record wird das wohl so nicht gehen.
Ich habe zwei Array mit gleichem wert die ich der ZOrder entsprechend neu sortieren muss.

Weis nur noch nicht wie. ;)

gruss

Delphi.Narium 24. Dez 2017 12:52

AW: Tagarray
 
Kannst Du uns bitte mal die Definition der Arrays zeigen und eventuell ein paar Beispielwerte? Momentan ist mir das noch zu abstrakt um eine genaue Vorstellung davon zu haben, was genau gemacht werden soll.

EWeiss 24. Dez 2017 16:20

AW: Tagarray
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Delphi.Narium (Beitrag 1389614)
Kannst Du uns bitte mal die Definition der Arrays zeigen und eventuell ein paar Beispielwerte? Momentan ist mir das noch zu abstrakt um eine genaue Vorstellung davon zu haben, was genau gemacht werden soll.

Delphi-Quellcode:
zorder: Array[1..10]
faceorder: Array[1..10]
Das Array zorder ist gefüllt mit den wert der Positionen der einzelnen Icons.
Delphi-Quellcode:
procedure DrawCarousel(WinHandle: HWND);
var
  K: Integer;
  Angle: single;
  rc: TRect;
  fl: single;
  speed: Integer;
  xcenter, ycenter, zcenter: Single;
  radius: Single;
  anglePi: Single;
  scale, z: Single;
  x, y: Single;
begin
    if bAnimate then
    begin
       y     := trbY.GetTrackValue(trbY.Handle);
       speed := trbSpeed.GetTrackValue(trbSpeed.Handle) div 4;
       fl    := trbFocallength.GetTrackValue(trbFocallength.Handle) / 100;

       if fl < 0.02 then
         fl := 0.001;
       PiDiv180 := 1.74532925199433E-2;

       GetClientRect(HSprCtrl, rc);
       xcenter :=(rc.Right - 128) / 2;
       ycenter :=(rc.Bottom - 128) / 2;
       zcenter := ycenter / 2;
       radius  := rc.Right / 3.675;

       for K := ID_MAX_SPRITE downto 1 do
       begin
         Angle := gSpriteData[K].rAngle;
         anglePi := Angle * PiDiv180;
         z := sin(anglePi) * radius + zcenter;
         scale := fl / (fl + z);
         x := cos(anglePi) * radius;
         gSpriteData[K].xPos := round(x * scale + xcenter);
         gSpriteData[K].yPos := round(y * scale + ycenter - y);

         zorder[K] := round(Angle - 90);
         if zorder[K] > 180 then
           zorder[K] := 360 - zorder[K];

         faceorder[K] := K;

         if bMoveToLeft then
         begin
           Angle := Angle - speed;
           if Angle < 1 then
             Angle := 360
         end else
         begin
           Angle := Angle + speed;
           if Angle > 359 then
             Angle := Angle - 360;
         end;
         gSpriteData[K].rAngle := round(Angle);

         // Skalierungsfaktor berechnen
         if Check3Ddepth.GetCheckButtonStatus(Check3Ddepth.Handle) then
           gSprCtrl.GD_SetObjectScale(gSpriteData[K].ID, (ABS(zorder[K]) MOD 182) * 0.0027777 + 0.5)
         else
         gSprCtrl.GD_SetObjectScale(gSpriteData[K].ID, 1);

         // Alpha Kanal unschalten
         if CheckOpacity.GetCheckButtonStatus(CheckOpacity.Handle) and (fl > 0.999) then
               gSprCtrl.GD_SetObjectAlpha(gSpriteData[K].ID, round(MIN(100 * scale, 255)), false)
         else
         gSprCtrl.GD_SetObjectAlpha(gSpriteData[K].ID, 255, false);

         gSprCtrl.GD_SetObjectXY(gSpriteData[K].ID, gSpriteData[K].xPos, gSpriteData[K].yPos);

         if CheckSelfRotation.GetCheckButtonStatus(CheckSelfRotation.Handle) then
           gSprCtrl.GD_SetObjectAngle(gSpriteData[K].ID, round(gSpriteData[K].rAngle))
         else
         gSprCtrl.GD_SetObjectAngle(gSpriteData[K].ID, 0);
       end;

       // müsste hier das Array sortieren ...
       // ARRAY SORT zorder(), TAGARRAY faceorder()

       // Sprite ZOrder setzen
       K := faceorder[1];
       if bMoveToLeft then
       begin
         inc(K);
         if K > ID_MAX_SPRITE then
           K := 1;
       end;

       gSprCtrl.GD_SetObjectZorder(gSpriteData[K].ID, GD_ORDER_BOTTOM);
       gSprCtrl.GD_SetObjectZorder(gSpriteData[faceorder[ID_MAX_SPRITE]].ID, GD_ORDER_TOP);

       if CheckMarquee.GetCheckButtonStatus(CheckMarquee.Handle) then
         DrawMarquee(rc.Right);

       gSprCtrl.GI_UpdateWindow(HSprCtrl, false);
    end;
end;
Wie man hier sehen kann ist das total durcheinander.

gruss

p80286 24. Dez 2017 16:26

AW: Tagarray
 
Ich würde statt eines Arrays die gute alte doppel verpointerte Liste nehmen.
z.B.
Delphi-Quellcode:
type
  pMyrecord=^tMyrecord;
  tMyrecord : record
                next,last : pMyrecord;
                Name : string;
                Wert : integer;
              end;

var
  firstrec,
  lastrec,
  actrec : pMyrecord;

...
  if actrecord^.Name>actrecord^.nextrecord^.Name then Tausche(actrecord);
Ist nur ein grobes Beispiel, da fehlt z.B. die Prüfung auf NIL.

Oder gleich eine (Object)Liste, die bekommt eine Sortierfunktion oder 2 oder 3... und fertig ist die Laube.

Gruß
K-H

Bitte nicht schlagen, ich bin extrem konservativ.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:25 Uhr.
Seite 1 von 3  1 23      

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