AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Mehrere Icons nebeneinander darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Icons nebeneinander darstellen

Ein Thema von schwa226 · begonnen am 10. Jul 2009 · letzter Beitrag vom 3. Aug 2009
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#11

Re: Mehrere Icons nebeneinander darstellen

  Alt 11. Jul 2009, 22:26
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;
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#12

Re: Mehrere Icons nebeneinander darstellen

  Alt 11. Jul 2009, 22:54
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?
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#13

Re: Mehrere Icons nebeneinander darstellen

  Alt 11. Jul 2009, 23:00
Zitat von schwa226:

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.
Entweder mit ToolButton.Left oder ToolButton.Index an die richtige Position schieben.
Zitat von schwa226:
Auch schaffe ich es nicht die Icon Größe zu verändern.
Ich möchte gern die Icons mit 32x32 darstellen.
Delphi-Quellcode:
ToolButton.AutoSize := True;
Toolbar.AutoSize := True;
ImageList.Width := 32;
ImageList.height := 32;
Du könntest dir auch mal tListView mit ViewStyle := vsLargeIcons anschauen.
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#14

Re: Mehrere Icons nebeneinander darstellen

  Alt 11. Jul 2009, 23:29
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
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#15

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 10:33
Zitat von schwa226:
Tut leid aber,

Index kann nichts zugewiesen werden.
Dann machs mit Left oder schau dir die anderen Methoden / Eigenschaften von TToolButton und TToolbar an. Steht recht ausführlich in der Delphi-Hilfe und genügend Beispiele findet man hier im Forum auch...
Zitat von schwa226:
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
Wie holst du dir denn das Icon-Handle?
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#16

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 10:54
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.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#17

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 11:27
Zitat von schwa226:
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.
Du kannst bestimmt die Dateinamen der dort angezeigten Programme ermitteln, also kannst du dir auch 32er Bildchen holen...
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#18

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 11:57
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.
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#19

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 12:04
Zitat von schwa226:
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.
Dann musst du Bilder eben strecken. Hier im Forum suchenStretchDraw
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#20

Re: Mehrere Icons nebeneinander darstellen

  Alt 12. Jul 2009, 18:03
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?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 18:20 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