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

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

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

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

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

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

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

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



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

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

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


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

последней строкой 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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TToolButton.Width and tbsDropDown / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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