AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TToolbarButton aus Toolbar entfernen

Ein Thema von tools400 · begonnen am 6. Nov 2011 · letzter Beitrag vom 7. Nov 2011
Antwort Antwort
tools400

Registriert seit: 3. Nov 2011
3 Beiträge
 
#1

TToolbarButton aus Toolbar entfernen

  Alt 6. Nov 2011, 19:04
Hallo Zusammen,

ich versuche nun schon seit einigen Tagen, dem SVN Wizard von 'scdevelop' (http://delphiaddinfortortoisesvn.tigris.org/) beizubringen einige seiner Funktionen als Buttons in der 'Custom Toolbar' anzuzeigen. Prinzipiell funktioniert dies auch, wenn da nicht noch unter gewissen Umständen 'Geister-Buttons', dass heißt leere Buttons ohne Icon und ohne Action stehen bleiben würden. Im Detail bedeutet dies:

a) Der Wizard funktioniert, wenn er für ein Projekt aktiviert oder deaktiviert wird.

b) Er funktioniert nicht, wenn ein oder mehrere Projekte den Wizard einbinden und andere Projekte nicht. In den Projekten ohne Wizard werden dann in der 'Custom Toolbar' leere Buttons ohne Icon und Action angezeigt.

Erzeugt werden die Buttons mit diesem Code (http://stackoverflow.com/questions/4...button-runtime) (leicht modifiziert):

Code:
procedure TTortoiseSVN.AddActionToToolbar(var bar: TToolBar; action: TAction);
var
  newbtn: TToolButton;
  lastbtnidx: integer;
begin
  newbtn := TToolButton.Create(bar);
  newbtn.Action := action;
  lastbtnidx := bar.ButtonCount - 1;
  if lastbtnidx > -1 then
    newbtn.Left := bar.Buttons[lastbtnidx].Left + bar.Buttons[lastbtnidx].Width
  else
    newbtn.Left := 0;
  newbtn.Parent := bar;
  tSvnToolbarActions.Add(action);
end;
Und entfernt werden Buttons wie im "Component Writer’s Guide" (http://docwiki.embarcadero.com/RADSt...7s_Guide_Index) beschrieben.

Code:
procedure TTortoiseSVN.RemoveActionFromToolbar (Action: TAction; ToolBar: TToolBar);
var i: Integer;
    Btn: TToolButton;
begin
    for i := ToolBar.ButtonCount - 1 downto 0 do begin
      Btn := ToolBar.Buttons[I];
      if Btn.Action = Action then begin
        { Remove "Btn" from "ToolBar" }
        ToolBar.Perform(CM_CONTROLCHANGE, WPARAM(Btn), 0);
        Btn.Free;
      end;
    end;
end;
Screenshot_1.jpg zeigt, wie die Toolbar bei aktivem Wizard aussieht. Screenshot_2.jpg demonstriert die leeren 'Geister-Buttons'.

Hat jemand eine Idee, wie das Problem gelöst werden kann?

Die verwendete IDE ist Delphi 7, bzw. Delphi 7 Personal.

Thomas.
Miniaturansicht angehängter Grafiken
screenshot_1.jpg   screenshot_2.jpg  

Geändert von tools400 ( 6. Nov 2011 um 20:08 Uhr) Grund: Screenshots hinzugefügt.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: TToolbarButton aus Toolbar entfernen

  Alt 7. Nov 2011, 07:32
Sind die Buttons noch da, d.h. reagiert da etwas auf MouseOver, oder hat die Toolbar nur vergessen, sich neu zu organisieren? Könnte ja auch sein, das die Toolbar zu blöd ist, sich automatisch zu verkleinern. Da könnte man ja nachhelfen.
  Mit Zitat antworten Zitat
tools400

Registriert seit: 3. Nov 2011
3 Beiträge
 
#3

AW: TToolbarButton aus Toolbar entfernen

  Alt 7. Nov 2011, 08:08
Leider sind die Buttons noch vorhanden und reagieren auf MouseOver. Lediglich die Icons sind verschwunden und wenn man auf einen Button klickt, wird keine Aktion ausgelöst. Soll ich eventuell mal meinen Projektordner (74k) anhängen?
Miniaturansicht angehängter Grafiken
screenshot_3.jpg  
  Mit Zitat antworten Zitat
tools400

Registriert seit: 3. Nov 2011
3 Beiträge
 
#4

AW: TToolbarButton aus Toolbar entfernen

  Alt 7. Nov 2011, 13:33
Ich habe den Eindruck, dass es für dieses Problem keine vernünftige Lösung gibt oder das es sich möglicherweise sogar um einen Bug der Delphi IDE handelt. Folgendes konnte ich bisher beobachten:

Ausgangszustand:

Frisch installiertes Delphi mit 'TortoiseSVN.bpl' in DELPHI_HOME/Projects/Bpl.
Neues, nicht weiter modifiziertes Anwendungsprojekt, erstellt über 'Datei' -> 'Neu' -> 'Anwendung'. Nennen wird es 'Projekt1'. Das Projekt ist gespeichert und Delphi ist beendet.

Testablauf:

Starte ich nun die IDE für 'Projekt1' und aktiviere den Wizard über 'Komponente' -> 'Packages installieren', so erscheinen die SVN Buttons in der Toolbar und der neue Zustand der Toolbar wird mit dem Beenden von Delphi in folgenden Registry Key geschrieben:

HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Tool bars: "CustomToolBar"

Starte ich nun die IDE für 'Projekt1' erneut und deaktiviere den SVN Wizard, so verschwinden die SVN Buttons aus der Toolbar und und mit dem Beenden von Delphi entspricht die Registry wieder dem Ausgangszustand. Soweit funktioniert alles bestens.

So, und jetzt wird es spannend.

Zunächst wird die IDE wieder gestartet, 'Projekt1' geladen, der SVN Wizard aktiviert und die IDE beendet. Die Registry beinhaltet die neuen SVN Buttons.

Wird die IDE jetzt erneut gestartet, so erzeugt Delphi automatisch ein neues Projekt ohne SVN Wizard (ist ja auch richtig), zeigt jedoch die nun leeren und aktionslosen SVN Buttons an. Das ist falsch!

Die Vermutung liegt nahe, dass die Buttons angezeigt werden, weil sie ja durch 'Projekt1' zuvor in die Registry eingetragen worden sind. Falsch finde ich jedoch, dass Delphi nicht merkt, dass hinter den Buttons keinen Aktionen liegen (Button.Action = nil). Buttons ohne Actions dürften meiner Meinung nach nicht angezeigt werden.

Vielleicht noch wichtiger ist, dass mit dem Beenden des Wizards auch die Buttons aus der Toolbar entfernt wurden, jedoch nicht die Registry unverändert blieb!

Thomas.
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:04 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