powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TToolButton.Width and tbsDropDown
8 сообщений из 8, страница 1 из 1
TToolButton.Width and tbsDropDown
    #38990073
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стандартный TToolBar. Стандартные TToolButton. Если у кнопки стиль tbsButton, то ее ширина, по умолчанию, 23 пиксела. Если tbsDropDown, то 38. В дизайнере все происходит именно так. В приложении ширина некоторых кнопок со стилем tbsDropDown оказывается 23 пикселя. Систему я не понял. Причем вплоть до того, что на одном тулбаре лежат пять таких кнопок, четыре с шириной 38, одна 23. Может, кто скажет куда копать? Приложение без манифеста. В dfm я отличий у этих кнопок не вижу. Отладка показала, что при обработке сообщения
Код: pascal
1.
  if Perform(TB_GETITEMRECT, Index, R) <> 0 then

и возвращается эта ширина

С уважением, Vasilisk
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990236
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Есть смутные воспоминания, связанные с видимостью кнопки. Кнопка всегда видима? Нет ли скрытия кнопки в дизайн-тайме (имеется в виду ситуация когда форма в дизайнтайме имеет ширину 100, а левый угол кнопки - 120(т.е. кнопка уезжает за видимые границы).

И еще - тулбар лежит на форме?
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990388
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Стиль проблемной кнопки, случаем, не меняется? С tbsButton на tbsDropDown.
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990811
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster. Кнопка всегда видима?Спасибо. Буду плясать от этого. Кнопка видима, но задизейблена. Если убрать дизейбл в момент создания кнопки, то ширина начинает считаться правильно.

Родители тулбара: TTabSheet -> TPageControl -> TForm -> TPanel (via Docking) -> TForm

Стиль не меняется
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990959
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, условие повторения: в OnCreate формы выполнить
Код: pascal
1.
ToolButton1.Enabled := False



Если этот код перенести в OnShow или если Enabled = False в dfm, то все работает нормально. DarkMaster спасибо за пинок в нужном направлении
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990962
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, В своё время тоже с ТТулбаром маялся, там ещё байда с разделителями (вертикальная черта) есть - попробуй. Всё как-то налезает, некрасиво всё, муторно...
И с ТКонтролБаром тоже маялся с ресайзами.

Ушёл на своего наследника ТПанель. И всё стало чики-чики.
__________
Сейчас и вовсе от ГУИ ушёл, чего и всем желаю. ГУИ пусть дезигнеры рисуют.
А себе оставьте процедуры (методы) и структуры.

Комманд лайн - лучший ГУИ-тестер.
...
Рейтинг: 0 / 0
TToolButton.Width and tbsDropDown
    #38990964
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Итак, условие повторения: в OnCreate формы выполнить
Код: pascal
1.
ToolButton1.Enabled := False


.
Если этот код перенести в OnShow или если Enabled = False в dfm, то все работает нормально. DarkMaster спасибо за пинок в нужном направленииВот теперь проставь разделители групп кнопок. И поиграйся с ними. И чтобы не было а-ля ||
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
TToolButton.Width and tbsDropDown
    #39511609
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднялся аналогичный вопрос. Опубликую я здесь свое решение для будущих поколений

последней строкой FormCreate идет вызов
Код: pascal
1.
RealignToolBars(Self);

Сама процедура реализована так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
type
  TEnumControlsProc = function (AControl: TControl): Boolean of object;

class function TMethods.RealignToolBars(AControl: TControl): Boolean;
var
  LToolBar: TToolBar absolute AControl;
begin
  Result := not (AControl is TToolBar);
  if not Result then begin
    LToolBar.HandleNeeded;
    if LToolBar.Wrapable then
      LToolBar.Realign;
  end;
end;

procedure EnumControls(AParent: TWinControl; const AEnumProc: TEnumControlsProc);
var
  Li: Integer;
  LControl: TControl;
begin
  for Li := 0 to AParent.ControlCount - 1 do begin
    LControl := AParent.Controls[Li];
    if AEnumProc(LControl) and (LControl is TWinControl) then
      EnumControls(TWinControl(LControl), AEnumProc);
  end;
end;

procedure RealignToolBars(AParent: TWinControl);
begin
  EnumControls(AParent, TMethods.RealignToolBars);
end;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TToolButton.Width and tbsDropDown
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]