Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TAction.Caption in Speedbutton deaktivieren (https://www.delphipraxis.net/185283-taction-caption-speedbutton-deaktivieren.html)

Captnemo 27. Mai 2015 18:51

TAction.Caption in Speedbutton deaktivieren
 
Hi,

nach langem Rumprobieren mit Ribbon (dann verworfen, weil mir dort bestimmte Möglichkeiten fehlen)
habe ich mich entschlossen, einfach mit Actions ,ActionMainMenuBar und einem simplen Panel zu arbeiten.

Nun stellt sich folgendes Problem. Z.B. habe ich eine TAction mit der Caption "Schrift vergrößern", die ich sowohl im MainMenu einsetzen will, als auch mit einem Speedbutton verbinden will. Ist ja auch kein Problem. Während ich im MainMenu die Caption haben will, so soll sie im Speedbutton natürlich nicht angezeigt werden.
Der Speedbutton übernimmt die Caption ja automatisch in seine Eigenschaften. Auch wenn ich sie da händisch wieder rauslösche, also im OI beim Speedbutton Caption leer ist, und in der Delphi-GUI alles richtig dargestellt wird, wird zur Runtime die Caption im Speedbutton trotzdem wieder dargestellt, was nicht wirklich schön aussieht.

Wie kann man das lösen?

Uwe Raabe 27. Mai 2015 19:09

AW: TAction.Caption in Speedbutton deaktivieren
 
Überall wo die Caption nicht übernommen werden soll, diese Unit in die interface-uses-clause mit aufnehmen:

Delphi-Quellcode:
unit NoCaptionSpeedButtons;

interface

uses
  Vcl.Controls, Vcl.Buttons;

type
  TSpeedButton = class(Vcl.Buttons.TSpeedButton)
  protected
    function GetActionLinkClass: TControlActionLinkClass; override;
  end;

  TNoCaptionSpeedButtonActionLink = class(Vcl.Buttons.TSpeedButtonActionLink)
  protected
    function IsCaptionLinked: Boolean; override;
  end;

implementation

function TSpeedButton.GetActionLinkClass: TControlActionLinkClass;
begin
  Result := TNoCaptionSpeedButtonActionLink;
end;

function TNoCaptionSpeedButtonActionLink.IsCaptionLinked: Boolean;
begin
  result := false;
end;

end.

Harry Stahl 27. Mai 2015 20:09

AW: TAction.Caption in Speedbutton deaktivieren
 
Das ist ja eine schöne Lösung, kannte ich auch noch nicht.

Kleiner Nachteil ist dabei aber, dass dann alle Buttons den Caption-Text der Action nicht erhalten. Ich habe teilweise Buttons, die sollen den Action-Text übernehmen, andere nicht.

Da habe ich es simpel so gelöst, dass zur Runtime, im FormCreate-Event die Caption-Eigenschaft der betroffenen Speedbuttons einfach auf leer gesetzt wird

Delphi-Quellcode:
button1.caption := '';

himitsu 27. Mai 2015 20:26

AW: TAction.Caption in Speedbutton deaktivieren
 
Dann eben richtig ableiten, noch ein Property zum (de)aktivieren dieser Funktion mit einbauen und diese neue Komponente dann natürlich in ein Designtime-Package rein.

Alernativ in der #2 als Public-Property rein und per Code zuweisen (z.B. im OnCreate), aber zur DesignTime geht es so natürlich nicht.

Uwe Raabe 27. Mai 2015 20:44

AW: TAction.Caption in Speedbutton deaktivieren
 
Zitat:

Zitat von himitsu (Beitrag 1303299)
Dann eben richtig ableiten, noch ein Property zum (de)aktivieren dieser Funktion mit einbauen und diese neue Komponente dann natürlich in ein Designtime-Package rein.

Das wäre in der Tat der korrekte Weg.

Captnemo 27. Mai 2015 21:00

AW: TAction.Caption in Speedbutton deaktivieren
 
Super, danke für die Lösung. Da wär das ch im Leben nicht selbst drauf gekommen.

Zum Thema "dann haben alle Speedbuttons keine Caption" : dann leite ich mir das halt in eine neue Klasse TNoCaptionSpeedButton ab, dann sollte TSpeedButton nach wie vor über seine Caption verfügen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 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