TTMSFNCRibbon not work ShortCutHint

OS: Debian 10 (buster) LXDE
fpc 3.3.1
lazaraus 2.1

FNC TMS FNC UI Pack
v3.2.2.1 | Tuesday, December 08, 2020

component: TTMSFNCRibbon not work ShortCutHint

Exapmple:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LCLTMSFNCRibbon;

type

{ TForm1 }

TForm1 = class(TForm)
TMSFNCRibbon1: TTMSFNCRibbon;
TMSFNCRibbon1BottomContainer: TTMSFNCRibbonBottomContainer;
TMSFNCRibbon1Caption: TTMSFNCRibbonCaption;
TMSFNCRibbon1Icon: TTMSFNCRibbonIcon;
TMSFNCRibbon1PageControl: TTMSFNCRibbonPageControl;
TMSFNCRibbon1PageControlContainer: TTMSFNCRibbonContainer;
TMSFNCRibbon1PageControlFileButton: TTMSFNCRibbonFileButton;
TMSFNCRibbon1PageControlPage0: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1PageControlPage1: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1PageControlPage2: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1QAT: TTMSFNCRibbonQAT;
TMSFNCRibbon1SystemMenu: TTMSFNCRibbonSystemMenu;
TMSFNCRibbon1SystemMenuCloseButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuHelpButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuMaximizeButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuMinimizeButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1Wrapper: TTMSFNCRibbonToolBarWrapper;
procedure FormCreate(Sender: TObject);
private
procedure btnOnClick1(Sender: TObject);

public

end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
tb: TTMSFNCRibbonToolBar;
btn: TTMSFNCRibbonToolBarButton;
i: integer;
begin
TMSFNCRibbon1.PageControl.Pages.Clear;
for I := 0 to 2 do
TMSFNCRibbon1.PageControl.AddPage('Page ' + IntToStr(I));

TMSFNCRibbon1PageControl.Pages[0].ShortCutHint := 'A';
TMSFNCRibbon1PageControl.Pages[1].ShortCutHint := 'B';
TMSFNCRibbon1PageControl.Pages[2].ShortCutHint := 'C';

for I := 0 to 1 do begin
tb := TMSFNCRibbon1PageControl.PageContainers[0].AddToolBar('ShortCutHint Toolbar');
tb.ShortCutHint := 'T';
btn := tb.AddButton;
btn.Width := 200;
btn.OnClick := @btnOnClick1;
btn.Text := 'Calendar';
btn.ShortCutHint := 'TB'+inttostr(1 * (I + 1));
btn := tb.AddButton;
btn.Width := 200;
btn.Text := 'Date/Time';
btn.ShortCutHint := 'TB'+IntToStr(2 * (I + 1));

end;
end;

procedure TForm1.btnOnClick1(Sender: TObject);
begin
ShowMessage('Calendar');
end;

end.

Hi,

We have tested this here on Windows and could see shortcut hints. Did you press the ALT key to show the shortcuts?

of course, press ALT key

I also compiled for win32, cross-compile, not work

Hi,

Shortcuts need to have only one character and need to be unique for each display. See below:

  for I := 0 to 1 do begin
  tb := TMSFNCRibbon1.PageControl.PageContainers[0].AddToolBar('ShortCutHint Toolbar');
  tb.ShortCutHint := 'T';
  btn := tb.AddButton;
  btn.Width := 200;
  btn.Text := 'Calendar';
  btn.ShortCutHint := chr(65 + I * (I * 2));
  btn.OnClick:= @DoClick;
  btn := tb.AddButton;
  btn.Width := 200;
  btn.Text := 'Date/Time';
  btn.ShortCutHint := chr(65 + I + (I * 2) + 1);
  btn.OnClick:= @DoClick;

My example code example doc pdf:
(I attached at the beginning)

Yes, I saw the code, but the code is not correct. You cannot have shortcut hints with multiple characters.

TB1 is not allowed.

Please change it to another unique character such as A, B, C, D, ... as demonstrated in my screenshot.

there is still a problem, nothing is happening

Button File
ShorCutHint = F
not work

Are you able to reproduce this in Windows as well?

I also compiled for win32, cross-compile, not work
(I wrote in the first answer)

We have tested here on Lazarus 2.0.2 on Windows and shortcut hints are working. Please attach a sample demonstrating the issues.

Lazarus 2.1

coross compile to aarch64 linux
ubuntu 20.04 - Raspberry pi 400
(same behavior as on linux debian, not working)

example :unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, LCLTMSFNCRibbon;

type

{ TForm1 }

TForm1 = class(TForm)
TMSFNCRibbon1: TTMSFNCRibbon;
TMSFNCRibbon1BottomContainer: TTMSFNCRibbonBottomContainer;
TMSFNCRibbon1Caption: TTMSFNCRibbonCaption;
TMSFNCRibbon1Icon: TTMSFNCRibbonIcon;
TMSFNCRibbon1PageControl: TTMSFNCRibbonPageControl;
TMSFNCRibbon1PageControlContainer: TTMSFNCRibbonContainer;
TMSFNCRibbon1PageControlFileButton: TTMSFNCRibbonFileButton;
TMSFNCRibbon1PageControlPage0: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1PageControlPage1: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1PageControlPage2: TTMSFNCRibbonPageControlContainer;
TMSFNCRibbon1QAT: TTMSFNCRibbonQAT;
TMSFNCRibbon1SystemMenu: TTMSFNCRibbonSystemMenu;
TMSFNCRibbon1SystemMenuCloseButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuHelpButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuMaximizeButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1SystemMenuMinimizeButton: TTMSFNCRibbonSystemMenuToolBarButton;
TMSFNCRibbon1Wrapper: TTMSFNCRibbonToolBarWrapper;
procedure FormCreate(Sender: TObject);
private
procedure btnOnClick1(Sender: TObject);

public

end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
tb: TTMSFNCRibbonToolBar;
btn: TTMSFNCRibbonToolBarButton;
i: integer;
begin
TMSFNCRibbon1.PageControl.Pages.Clear;
for I := 0 to 2 do
TMSFNCRibbon1.PageControl.AddPage('Page ' + IntToStr(I));

TMSFNCRibbon1PageControl.Pages[0].ShortCutHint := 'A';
TMSFNCRibbon1PageControl.Pages[1].ShortCutHint := 'B';
TMSFNCRibbon1PageControl.Pages[2].ShortCutHint := 'C';

for I := 0 to 1 do begin
tb := TMSFNCRibbon1PageControl.PageContainers[0].AddToolBar('ShortCutHint Toolbar');
tb.ShortCutHint := 'T';
btn := tb.AddButton;
btn.Width := 200;
btn.OnClick := @btnOnClick1;
btn.Text := 'Calendar';
btn.ShortCutHint := 'T'+inttostr(1 * (I + 1));
btn := tb.AddButton;
btn.Width := 200;
btn.Text := 'Date/Time';
btn.ShortCutHint := 'T'+IntToStr(2 * (I + 1));

end;
end;

procedure TForm1.btnOnClick1(Sender: TObject);
begin
ShowMessage('Calendar');
end;

end.

Your form needs to inherit from TTMSFNCRibbonForm:

TForm1 = class(TTMSFNCRibbonForm)

ShortCutHint it works now.
**but I lost TMSFNCRibbon1SystemMenu: TTMSFNCRibbonSystemMenu;
not minimize, maximize, close

We'll further investigate this here as soon as possible, thank you for the feedback.

We have investigated this here and what happens is the following: When inheriting from TTMSFNCRibbonForm (which is required) it sets the BorderStyle to none, which automatically clears the border icons. This is the reason for the system menu that is not visible. to fix this. Please use the following code in the form constructor:

procedure TForm1.FormCreate(Sender: TObject);
var
  r: TTMSFNCRibbon;
begin
  BorderIcons := [biSystemMenu, biMinimize, biMaximize];
  r := TTMSFNCRibbon.Create(Self);
  r.Parent := Self;
  r.RebuildUsingName('MyRibbon');
end;

Thanks, I'll wait for the correction.
If I use it like this, I need to write all the buttons.
Can't assign BitmapContainer once. (I have to individually for each new buttons)

But this is how it helps me

procedure TForm1.FormCreate(Sender: TObject);
begin
  BorderIcons := [biSystemMenu, biMinimize, biMaximize];

end;
1 Like