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 TToolbar zeichnet Seperator, obwohl er nicht soll (https://www.delphipraxis.net/80463-ttoolbar-zeichnet-seperator-obwohl-er-nicht-soll.html)

MaBuSE 9. Nov 2006 11:04


TToolbar zeichnet Seperator, obwohl er nicht soll
 
Hallo,

Wenn ein anderes Control als der ToolButton eingefügt wird, dann zeichnet die TToolBar einen Seperator unter dieses Control. Wenn das Control Transparent ist sieht man den -> :-(

Beisp:
  • Neues Form erzeugen
  • TToolBar auf Form plazieren
  • Rechtsklick auf TToolbar -> neuen Button
  • TToolButton wird erzeugt und richtig dargestellt.
  • TSpeedButton in TToolBar legen
  • TSpeedButton auf Flat setzen -> Es wird ein Seperator in der Mitte des TSpeedButtons sichtbar.
  • TLabel auf TToolBar legen
  • TLabel auf Transparent setzen -> Hinter der Caption ('Label1') ist der Seperator zu sehen.
Frage:
Wie kann ich Delphi daran hindern diesen Seperator zu zeichnen?

Das Problem tritt bei mir in Delphi 2006 auf.

Im Moment habe ich Transparent auf False fesetzt, das sieht aber sch... aus, da TToolBar.DrawingStyle := dsGradient eingestellt ist.

Ich kann die TToolBar nicht durch was anderes ersetzen, ich habe keine andere Wahl, ich muss TSpeedButton verwenden.
Ich verwende die Methode ToolsAPI.INTAServices.AddToolButton aber Delphi erzeugt einen TSpeedbutton statt TToolButton, da ImageIndex = -1 ist. (Es soll die Caption angezeigt werden)

rider 9. Nov 2006 11:13

Re: TToolbar zeichnet Seperator, obwohl er nicht soll
 
Ja, das scheint ein Bug zu sein. Hast du schon mal im Borland Quality Central gestöbert, ob das bereits berichtet wurde?

Aber warum brauchst du unbedingt einen SpeedButton? Captions kannst du mit dem Property ShowCaptions in der ToolBar auch für normale ToolButtons anzeigen. Auch das neue Property List sieht recht chic aus.

MaBuSE 9. Nov 2006 12:53

Re: TToolbar zeichnet Seperator, obwohl er nicht soll
 
Zitat:

Zitat von rider
Ja, das scheint ein Bug zu sein. Hast du schon mal im Borland Quality Central gestöbert, ob das bereits berichtet wurde?

Nein ;-)
Zitat:

Zitat von rider
Aber warum brauchst du unbedingt einen SpeedButton? Captions kannst du mit dem Property ShowCaptions in der ToolBar auch für normale ToolButtons anzeigen. Auch das neue Property List sieht recht chic aus.

Das habe ich schon geschrieben:
Die Delphi IDE erzeugt automatisch einen TSpeedButton.

btw: ShowCaptions zeigt die Captions aller ToolButtons. Das ist nicht gewünscht.

Zitat:

Zitat von MaBuSE
Ich verwende die Methode ToolsAPI.INTAServices.AddToolButton aber Delphi erzeugt einen TSpeedbutton statt TToolButton, da ImageIndex = -1 ist. (Es soll die Caption angezeigt werden)

Ich habe das nun wie folgt gelöst:
Der Action habe ich nun ein Imageindex > -1 zugewiesen.
Damit erzeugt die Delphi IDE einen TToolButton und keinen TSpeedButton.
Dann mit AllowTextButtons die Moglichkeit nur bei bestimmtenButtons die Caption anzuzeigen aktiviert.
Den ImageIndex nachträglich wieder auf -1 gesetzt. (Ich will ja kein Bild)
und den TToolButton.Style auf tbsTextButton gesetzt.

-> Funktioniert.

Hier der Quellcode:
Delphi-Quellcode:
constructor TmyClearCaseExpert.Create;
var
  myService: INTAServices;
  tb: TToolbar;
  tc: TControl;
...
begin
  inherited;
...
  if BorlandIDEServices <> nil then
  begin
    if Supports(BorlandIDEServices, INTAServices, myService) then
    begin
...
        // Der Delphi 2006 IDE eine Toolbar hinzufügen
        tb := myService.NewToolbar('myClearCaseToolBar', 'ClearCase', 'CustomToolBar', True);
        tb.AutoSize := True;
        tb.AllowTextButtons := True;
...
        // Buttons hinzufügen
        actCcStatus.ImageIndex := 0; // actCcStatus ist vom Typ TAction;
        tc := myService.AddToolButton('myClearCaseToolBar', 'myCcStatus', actCcStatus);
        actCcStatus.ImageIndex := -1;

        // Wenn ImageIndex = -1 dann ist es ein TSpeedButton
        if (tc is TSpeedButton) then
        begin
          (tc as TSpeedButton).Transparent := False;
        end;

        // Wenn ImageIndex > -1 dann ist es ein TToolButton
        if (tc is TToolButton) then
        begin
          (tc as TToolButton).Style := tbsTextButton;
        end;
...
    end;
  end;
end;

dabba 1. Jun 2010 07:40

Re: TToolbar zeichnet Seperator, obwohl er nicht soll
 
Hallo allerseits! :)

Ich hole den alten Thread nochmal hoch, weil ich das gleiche Problem mit der TToolbar habe.

Sind die Laufzeit-Themes aktiv, wird hinter jedem TControl, der kein Button ist, ein Separator gezeichnet (Delphi 2007 11.0). Die Controls sind u. a. Checkboxen und Comboboxen, die sich nur schwierig ersetzen lassen würden.

Kann man das beheben?

MaBuSE 1. Jun 2010 07:55

Re: TToolbar zeichnet Seperator, obwohl er nicht soll
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von rider
Ja, das scheint ein Bug zu sein. Hast du schon mal im Borland Quality Central gestöbert, ob das bereits berichtet wurde?

Nein ;-)

Ich habe einfach vergessen den Bug zu melden. :-(
Ich hatte ja einen Workarround für mich gefunden.
Somit ist er wahrscheinlich auch noch in der aktuellen D2010 enthalten. (Werde ich demnächst testen.)

Du kannst den Bug gerne melden, ansonsten mach ich das die Tage, dann ist er vieleicht in D2012 weg ;-)

dabba 16. Jun 2010 13:12

AW: TToolbar zeichnet Seperator, obwohl er nicht soll
 
Embarcardero kann den Fehler offenbar nicht fixen, daher scheint es außer einer alternativen Komponente keine Möglichkeit zu geben, den unschönen Balken loszuwerden. Kennt jemand vielleicht noch andere Toolbar-Komponenten, die möglichst kompatibel zur TToolbar von Delphi sind?


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