Das klappt soweit ganz gut, die Beschriftung, das Glyph und der Hint werden automatisch geändert. Was mich etwas wurmt ist, dass ich bisher nur eine einzige funktionierende Idee habe, wie ich die Breite des SpeedButtons nach dem Wechsel dynamisch anpassen kann (siehe angehängten Quellcode:
Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
Buttons, ActnList, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
ImageList: TImageList;
ToolBar: TToolBar;
SBtn: TSpeedButton;
ActionList: TActionList;
Action1: TAction;
Action2: TAction;
procedure Action1Execute(Sender: TObject);
procedure Action2Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Action1Execute(Sender: TObject);
begin
SetSpeedButtonAction(SBtn, Action2);
end;
procedure TForm1.Action2Execute(Sender: TObject);
begin
SetSpeedButtonAction(SBtn, Action1);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Action2Execute(Sender);
end;
procedure TForm1.SetSpeedButtonAction(Btn: TSpeedButton; newAction: TAction);
begin
with Btn do begin
Glyph.Clear;
Action := newAction;
ClientWidth := Glyph.Width + Canvas.TextWidth(Caption) + 3*Spacing;
end;
end;
end.
Code: Alles auswählen
object Form1: TForm1
Left = 692
Height = 240
Top = 247
Width = 320
Caption = 'Form1'
ClientHeight = 240
ClientWidth = 320
OnCreate = FormCreate
LCLVersion = '1.0.8.0'
object ToolBar: TToolBar
Left = 0
Height = 26
Top = 0
Width = 320
Caption = 'ToolBar'
Images = ImageList
TabOrder = 0
object SBtn: TSpeedButton
Left = 1
Height = 24
Top = 2
Width = 4
Align = alLeft
NumGlyphs = 0
OnClick = Action1Execute
ShowHint = True
ParentShowHint = False
end
end
object ActionList: TActionList
Images = ImageList
left = 200
top = 160
object Action1: TAction
Caption = 'Stop - Anhalten!'
Hint = 'Action1'
ImageIndex = 0
OnExecute = Action1Execute
end
object Action2: TAction
Caption = 'MD5'
Hint = 'Action2'
ImageIndex = 1
OnExecute = Action2Execute
end
end
object ImageList: TImageList
left = 77
top = 91
Bitmap = {
4C69020000001000000010000000000000000000000007071100000000000000
4E60515196B0525296AF525296AF525296AF525296AF4D4D94B0000029480000
000000000000000000000000000000000000060611000000000002024E56BABA
E5FFE4E4FFFFE2E2FFFFE2E2FFFFE2E2FFFFE2E2FFFFE5E5FFFF8686C9FF0000
2C47000000000000000000000000060611000000000009095052B7B7E7FFCFCF
FEFFCDCDFEFFCDCDFEFFCACAF8FFCACAF9FFCCCCFDFFCCCCFDFFD3D3FDFF7F7F
C7FF02022F4600000000000000000000000001014E56B3B3E7FFC0C0FDFFBDBD
FDFFBDBDFDFFBBBBFAFFD7D7D5FFCBCBD1FFBBBBF7FFBBBBFBFFBBBBFBFFC4C4
FCFF7A7AC6FF00002C470000000000004D60AAAAE5FFAEAEFCFFAAAAFCFFA9A9
FCFF9090B1FFF7F7F6FFE4E4E4FFDADADAFFE4E4E4FFA7A7FEFFA5A5F8FFA5A5
F8FFB2B2F8FF7A7AC7FF00002B4A474794B0B6B6FFFF9393F9FF9393F9FF8787
D3FFDDDDDBFFF8F8F8FFE4E4E4FFDFDFDFFFE1E1E0FF9191FBFF9090F8FF9090
F7FF8D8DF4FFC3C3FFFF1616628D444494AFA7A7FDFF8282F7FF8181F6FF6969
A6FFE8E8E7FFF7F7F7FFE1E1E1FFD1D1D1FFCCCCCBFF3D3DF3FF2D2D4BFF2424
6FFF3D3DE9FF9696F8FF1414628C383892AF6C6CF6FF4040EEFF4343EEFF2121
6AFFE7E7E6FFB9B9B9FF9D9D9DFF909090FFCACAC9FF2222A3FFFCFCFBFF1F1F
99FF2929E3FF8080F3FF1111628C383892AF6868F3FF3333EAFF3131E8FF0E0E
5CFFB1B1B0FFF6F6F6FFFFFFFFFFFFFFFFFFD6D6D7FF969695FFBBBBBCFF2525
DCFF2424DEFF7D7DF0FF1111628C383892AF6464F0FF2D2DE5FF2C2CE5FF1010
71FFF8F8F7FFFFFFFFFFFFFFFFFFBBBBBBFFEEEEEEFFFFFFFEFF0B0B34FF2121
DCFF2020DAFF7B7BEEFF1111618C33338EAF6969EFFF2828E1FF2828E1FF1A1A
ABFFECECEAFFFFFFFFFFEAEAEAFFD2D2D2FFFFFFFFFFCCCCCCFF1D1DD7FF1D1D
D8FF1A1AD6FF7B7BECFF0F0F608C000027485959C1FF4747E3FF2323DDFF2323
E0FFA7A7ADFFFFFFFFFFCCCCCCFFFFFFFFFFF8F8F7FF04043AFF1A1AD5FF1919
D4FF5858E0FF3A3AA6FC0000053A0000000000002A475151BDFF4141DFFF1D1D
D8FF1515A6FF5B5B58FFA9A9A6FF91918BFF0B0B4FFF1717D4FF1616D2FF5858
DFFF3333A2FF00000E3F00000000000000000000000000002D464F4FBCFF3D3D
DBFF1818D5FF1616CFFF1313C5FF1313C7FF1515D3FF1313D0FF5555DDFF3232
A2FF00001240050500000000000000000000000000000000000000002A475454
BDFF7676E9FF7474E8FF7373E7FF7272E7FF7272E7FF7474E6FF3939A5FB0000
0D3F050500000000000000000000000000000000000000000000000000000000
2A490F0F608D1010618C1010618C1010618C1010618C0E0E5F8C0000053A0000
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7B278FFD7B278FFD7B278FFD5B0
76FFD2AD73FFCFAA70FFCBA76DFFC7A36AFFFFFFFF00D7B278FFD5B076FFD5B0
76FFD3AF75FFFFFFFF00FFFFFF00FFFFFF00D5B076FFD2AD73FFCFAA70FFCBA7
6DFFC7A36AFFC39F66FFBE9B62FFBA965DFFFFFFFF00D2AD73FFCDA86FFFFFFF
FF00C9A56BFFC7A36AFFFFFFFF00FFFFFF00CBA76DFFC7A36AFFFFFFFF00BE9B
62FFBA965DFFFFFFFF00B08D54FFAB8850FFFFFFFF00C39F66FFC39F66FFFFFF
FF00BB975EFFB6935AFFFFFFFF00FFFFFF00BE9B62FFBA965DFFFFFFFF00B08D
54FFAB8850FFFFFFFF00A07E46FF9B7941FFFFFFFF00B6935AFFB08D54FFFFFF
FF00AD8A52FFA7854DFFFFFFFF00FFFFFF00B08D54FFAB8850FFFFFFFF00A07E
46FF9B7941FFFFFFFF008F6E37FF8A6932FFFFFFFF00A5834BFFA38149FFFFFF
FF0096743DFF96743DFFFFFFFF00FFFFFF00A07E46FF9B7941FFFFFFFF008F6E
37FF8A6932FFFFFFFF007F5F28FF7A5A24FFFFFFFF0096743DFF8F6E37FFFFFF
FF008A6932FF85642DFFFFFFFF00FFFFFF008F6E37FF8A6932FFFFFFFF007F5F
28FF7A5A24FFFFFFFF0070511BFF6C4C16FFFFFFFF0083622BFF7D5D26FFFFFF
FF00785821FF74541EFFFFFFFF00FFFFFF007F5F28FF7A5A24FFFFFFFF007051
1BFF6C4C16FFFFFFFF0063440EFF5F400BFFFFFFFF0072531DFF6F501AFF6C4C
16FF694914FF644510FFFFFFFF00FFFFFF0070511BFF6C4C16FFFFFFFF006344
0EFF5F400BFFFFFFFF00583904FF553702FFFFFFFF00644510FF61420DFF5F40
0BFF5C3E08FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D7B278FFD7B278FFD7B278FFD7B2
78FFD7B278FFD7B278FFD7B278FFD3AF75FFCDA86FFFC4A067FFBE9B61FFB693
5AFFAD8A52FFA38149FFFFFFFF00FFFFFF00D7B278FFD7B278FFD7B278FFD3AF
75FFCFAA70FFC7A36AFFBE9B61FFB6935AFFAD8A52FFA38149FF9B7941FF906F
38FF87662FFF7D5D26FFFFFFFF00FFFFFF00CDA86FFFC4A067FFBE9B62FFB693
5AFFAD8A52FFA38149FF96743DFF94733BFF85642DFF7D5D26FF74541EFF6C4C
16FF644510FF5C3E08FFFFFFFF00FFFFFF00AD8A52FFA38149FF9B7941FF906F
38FF85642DFF7D5D26FF74541EFF694914FF644510FF5C3E08FF583904FF5335
00FF533500FF553702FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00
}
end
end
Also, falls jemand da eine alternative Lösung kennt, ich bin für jeden Tipp dankbar!
Grüße Aldicek