![]() |
Re: Mehrere Icons nebeneinander darstellen
Man könnte ja auch so:
Delphi-Quellcode:
type
TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; type TIconBar = class(TGraphicControl) private FIconSize: integer; FIconSpace: integer; FClickedIndex: integer; FIconArray: Array of HIcon; procedure Sort; procedure SetIconSpacer(Value: integer); public constructor Create(Owner: TComponent); override; destructor Destroy; override; procedure Paint; override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure AddIcon(Icon: HIcon); procedure DeleteIcon(Index: integer); property IconSize: integer read FIconSize; property ClickedIndex: integer read FClickedIndex; property IconSpacer: integer read FIconSpace write SetIconSpacer; end; var Form1: TForm1; IconBar: TIconBar; implementation {$R *.dfm} constructor TIconBar.Create; begin inherited Create(Owner); FIconSize := 32; FIconSpace := 5; Width := FIconSize; Height := FIconSize; end; destructor TIconBar.Destroy; var i: integer; begin for i := 0 to length(FIconArray)-1 do DeleteObject(FIconArray[i]); SetLength(FIconArray, 0); inherited Destroy; end; procedure TIconBar.Sort; var i,j,help, entrys: cardinal; begin Entrys := length(FIconArray)-1; if Entrys > 0 then begin for i := 0 to Entrys - 1 do for j := i + 1 to Entrys do if FIconArray[i] < FIconArray[j] then begin help := FIconArray[i]; FIconArray[i] := FIconArray[j]; FIconArray[j] := help; end; end; end; procedure TIconBar.SetIconSpacer(Value: integer); begin FIconSpace := Value; end; procedure TIconBar.Paint; var i: integer; begin Canvas.Brush.Color := Color; Canvas.Brush.Style := bsSolid; Canvas.FillRect(ClientRect); for i := 0 to length(FIconArray)-1 do DrawIconEx(Canvas.Handle, i * (FIconSize + FIconSpace), 0, FIconArray[i], FIconSize, FIconSize, 0, 0, DI_NORMAL); end; procedure TIconBar.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin end; procedure TIconBar.AddIcon; begin Width := length(FIconArray) * (FIconSize + FIconSpace) + FIconSize; SetLength(FIconArray, length(FIconArray) + 1); FIconArray[length(FIconArray)-1] := Icon; Invalidate; end; procedure TIconBar.DeleteIcon; begin // todo: if (index >= 0) and (index < length(FIconArray)) then begin DeleteObject(FIconArray[index]); FIconArray[index] := 0; // (Re) Sort ... die Lücke muss nach oben Sort; // Löschen des Null-Eintrags SetLength(FIconArray, length(FIconArray)); Width := length(FIconArray) * (FIconSize + FIconSpace) - FIconSpace; Invalidate; end; end; // -------------------------------------------------------------------------// procedure TForm1.FormCreate(Sender: TObject); begin IconBar := TIconBar.Create(Self); IconBar.Top := 40; IconBar.Left := 40; IconBar.Parent := Self; IconBar.AddIcon( LoadIcon(0, IDI_APPLICATION) ); IconBar.AddIcon( LoadIcon(0, IDI_ASTERISK) ); IconBar.AddIcon( LoadIcon(0, IDI_EXCLAMATION) ); IconBar.AddIcon( LoadIcon(0, IDI_HAND) ); end; procedure TForm1.FormDestroy(Sender: TObject); begin IconBar.Free; end; procedure TForm1.Button1Click(Sender: TObject); begin IconBar.DeleteIcon(1); end; |
Re: Mehrere Icons nebeneinander darstellen
Danke!
Habe jetzt beide Ausprobiert! Bei der Toolbox habe ich das Problem, dass die neuen Icons immer links, also Index = 0 hinzugefügt werden! Kann man das umstellen, dass die Icons immer am Ende hinzugefügt werden? Denn sonst ist es ja genau anders rum wie mein Dyn Array. Auch schaffe ich es nicht die Icon Größe zu verändern. Ich möchte gern die Icons mit 32x32 darstellen. Die zweite Methode schaut auch gut aus, aber da habe ich das nächste Problem: ToolTip zu jedem Icon. Wie erkenne ich auch auf welches Icon mit der Mouse gedrückt wurde? |
Re: Mehrere Icons nebeneinander darstellen
Zitat:
Zitat:
Delphi-Quellcode:
Du könntest dir auch mal tListView mit ViewStyle := vsLargeIcons anschauen.
ToolButton.AutoSize := True;
Toolbar.AutoSize := True; ImageList.Width := 32; ImageList.height := 32; |
Re: Mehrere Icons nebeneinander darstellen
Tut leid aber,
Index kann nichts zugewiesen werden. Das mit der Größe geht auch nicht. Wenn ich dem TIcon sagen will das es 32x32 sein soll gibt es ein Fehler: Göße kann nicht geändert werden. Wenn ich nun also das 16x16 Icon auf die ImageList mit 32x32 lege bekomme ich auch einen Error, da unterschiedliche Größe :wall: |
Re: Mehrere Icons nebeneinander darstellen
Zitat:
Zitat:
|
Re: Mehrere Icons nebeneinander darstellen
Hab es nun so gelößt:
ich steppe mein Array durch bis ich das richtige Item gefunden habe, dann: ButtonIndex := Buttoncount - i - 1. Das geht so ganz gut! Die HIcons bekomme ich von der TNA, TNotificationData. Und da sind nur die Handles von den 16x16 Icons drinnen. Man müsste also das Icon Stretchen. |
Re: Mehrere Icons nebeneinander darstellen
Zitat:
|
Re: Mehrere Icons nebeneinander darstellen
Ich glaube das ist ein Problem,
den die Icons der gleichen Application ändern sich! D.H. die exe bleibt die gleiche aber das Icon-Handle ändert sich. |
Re: Mehrere Icons nebeneinander darstellen
Zitat:
![]() |
Re: Mehrere Icons nebeneinander darstellen
Danke!
WErds mir noch ansehen! Jetzt habe ich dazu noch eine Frage. Wie geht das dann bei der Toolbar mit OnMouseDown? Wie finde ich heraus welcher Button gedrückt wurde? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 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-2025 by Thomas Breitkreuz