![]() |
AW: Redord zu TStringlist hinzufügen
Zitat:
Ich versuche es mal mit dem Vorschlag von SneakyBagels und erstelle eine Classe für den Kram. EDIT: Hat sich erledigt zu viel Aufwand und bringt keinerlei Verbesserung. gruss |
AW: Redord zu TStringlist hinzufügen
Hallo,
nicht immer gleich den Compiler ins Korn werfen. Zitat:
Delphi-Quellcode:
Nun noch das Erzeugen vorm Add nicht vergessen
type
TSprite = packed record type TSprite = class type TSpriteListe = class(TObjectList) TSpriteListe = TList<TSprite> |
AW: Redord zu TStringlist hinzufügen
Zitat:
Dachte müsste meinen Record als Classe auslegen. OK werde das nochmal versuchen. Heute Nacht habe ich erst mal das kopieren der Icons in den Temp Ordner entfernt. Diese werden jetzt direkt erstellt und anschließend sofort wieder frei gegeben. Warum ich das so machen will mit der Liste. Ich möchte kein Array mehr verwenden sondern die Sprites auf diese weise ansprechen ob das so geht da bin ich mir noch nicht so sicher. Im Moment ist es so.
Delphi-Quellcode:
Das will ich dann so ändern.
Sprite[Prop.RecycleBin].IconPath := ExtractFilePath(ParamStr(0)) + 'UserIcon\48x48\' + sUseThumb;
IconPath := Sprite[Prop.RecycleBin].IconPath; Sprite[Prop.RecycleBin].h_Bitmap := CreateIcon.CreateCustomIcon(IconPath, Width, Height, 0); Sprite[Prop.RecycleBin].Width := Width; Sprite[Prop.RecycleBin].Height := Height; Sprite[Prop.RecycleBin].ShellTo := 'explorer.exe'; Sprite[Prop.RecycleBin].CmdLine := '/N;::{645FF040-5081-101B-9F08-00AA002F954E}'; Sprite[Prop.RecycleBin].ShowCmd := SW_SHOW;
Delphi-Quellcode:
Vorausgesetzt ich bekomme das mit der Liste hin und es bringt mir einen Vorteil.
var
Sprite : PSprite; begin Sprite.IconPath := ExtractFilePath(ParamStr(0)) + 'UserIcon\48x48\' + sUseThumb; IconPath := SpriteIconPath; Sprite.h_Bitmap := CreateIcon.CreateCustomIcon(IconPath, Width, Height, 0); Sprite.Width := Width; Sprite.Height := Height; Sprite.ShellTo := 'explorer.exe'; Sprite.CmdLine := '/N;::{645FF040-5081-101B-9F08-00AA002F954E}'; Sprite.ShowCmd := SW_SHOW; end; Irgendwo muss ich ja dann auch wissen welches Icon gerade in Verwendung bzw. zugewiesen wird. gruss |
AW: Redord zu TStringlist hinzufügen
Genau das ist der Vorteil einer Klasse. Da kannst du einfach TSprite als Typ für die Liste nehmen und es ist trotzdem ein Pointer.
Delphi-Quellcode:
var
Sprite: TSprite; begin Sprite := TSprite.Create; Sprite.IconPath := ExtractFilePath(ParamStr(0)) + 'UserIcon\48x48\' + sUseThumb; IconPath := SpriteIconPath; Sprite.h_Bitmap := CreateIcon.CreateCustomIcon(IconPath, Width, Height, 0); Sprite.Width := Width; Sprite.Height := Height; Sprite.ShellTo := 'explorer.exe'; Sprite.CmdLine := '/N;::{645FF040-5081-101B-9F08-00AA002F954E}'; Sprite.ShowCmd := SW_SHOW; Liste.Add(Sprite); end; |
AW: Redord zu TStringlist hinzufügen
Zitat:
Delphi-Quellcode:
Den Record möchte ich nicht verändern und extra eine Classe anlegen da habe ich meinen Pointer PSprite.
type
TSprite = packed record type TSprite = class type TSpriteListe = class(TObjectList) TSpriteListe = TList<TSprite>
Delphi-Quellcode:
Bin mir noch nicht sicher ob mir das Vorteile bringt.
TSprite = packed Record
CtrlName: WideString; CtrlIndex: Integer; Left: Single; Top: Single; Width: Integer; Height: Integer; Scale: Single; Opacity: Byte; ShellTo: string; IconPath: WideString; WorkDir: WideString; UseLabel: string; CmdLine: WideString; ShowCmd: longint; h_Bitmap: HBitmap; Visible: Bool; end; PSprite = ^TSprite; Auch bei einer TList muss ich unter umständen mit einem Array Arbeiten dann wäre es das gleiche wie vorher. Hmmm :stupid: Iregendwie bin ich mir nicht sicher wie er das meint.. Entweder oder? class oder TList<TSprite> ? Habe ich beides schon versucht bringt nicht wirklich was. gruss |
AW: Redord zu TStringlist hinzufügen
Zitat:
Du kannst die TList genauso ansprechen wie ein Array, sprich mit Liste[i] und intern wird auch ein Array verwendet. Aber du musst dich eben nicht um die entsprechenden Arrayoperationen kümmern, wenn du Einträge hinzufügst, löschst, usw. Du kannst natürlich auch TList<PSprite> mit deinem Record benutzen, aber musst dann wie bei einer Klasse den Speicher vorher reservieren und hinterher freigeben. Du hast aber den Nachteil, dass es passieren kann, dass der ganze Record kopiert wird, wenn du irgendwo nicht nur mit dem Pointer arbeiten kannst. Eine Klasse ist immer ein Pointer, da kann nicht mehr als der Pointer automatisch kopiert werden. Einfacher ist es aber eine TObjectList<TSprite> zu benutzen, TSprite als Klasse zu implementieren (sprich einfach oben packed record durch class ersetzen) und TSprite vor dem Hinzufügen wie ich im Quelltext gezeigt habe zu erzeugen. Wenn du dann den Eintrag aus der Liste löschst, wird dein TSprite auch automatisch freigegeben, darum musst du dich nicht kümmern. |
AW: Redord zu TStringlist hinzufügen
Delphi-Quellcode:
Sprite := TSprite.Create;
Bringt mir nichts auch wenn ich jetzt den Record als Classe auslege. Denn dann müsste ich auch hier ein Array anlegen dann kann ich es direkt so belassen wie es ist. Ich habe ja nicht nur ein Sprite das können 100 sein. Dann würde das ganze so aussehen.
Delphi-Quellcode:
oder
Sprite : Array of TList<TSprite>;
Delphi-Quellcode:
jetzt ist es so.
Sprite : Array of class(TObjectList);
Delphi-Quellcode:
Sprite : TArray<TSprite>;
bringt nicht wirklich was. Oder aber ich bin einfach zu dumm dafür :) gruss |
AW: Redord zu TStringlist hinzufügen
Was willst Du denn immer mit dem Array?
Delphi-Quellcode:
uses System.Generics.Collections;
... var SpriteList: TObjectList<TSprite>; Sprite: TSprite; begin Sprite := TSprite.Create; Sprite.Width := 42; //Weitere Eigenschaften setzen Sprites.Add(Sprite); //Weitere Sprites erzeugen und der Liste nach obigem Muster hinzufügen ... //Liste durchlaufen for Sprite in Sprites do //oder for i := 0 to Sprites.Count - 1 do |
AW: Redord zu TStringlist hinzufügen
Zitat:
Ich will es nicht. gruss |
AW: Record zu TStringlist hinzufügen
Du brauchst es ja auch nicht ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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