Изменяем вид кнопок на форме 1С 7.7

30.08.10

Разработка - Работа с интерфейсом

Изменяем вид кнопок на форме 1С 7.7. Статья для разработчиков ВК (Delphi)
Реализовано в http://infostart.ru/public/59436/?PAGEN_1=22#comm

Обратились ко мне любители "попугайских" форм с просьбой изменить вид (цвет) кнопок на форме, не прибегая к наложению картинки на кнопку.

Первое (и абсолютно неправильное!), что пришло в голову: наложить на кнопку что-то вроде TLabel, у которого есть возможность поменять цвета фона и шрифта. Однако, родная кнопка 1С в таком случае полностью перекрывается компонентом и, естественно, перестает реагировать на клик. В результате получаем цветную, но абсолютно нерабочую кнопку.

Второй вариант: создать динамически свою кнопку, но тогда события ее нажатия придется обрабатывать в форме в процедуре ОбработкаВнешнегоСобытия(), что не совсем комильфо.

Третий вариант: Оба! А что если перекрыть родную кнопку другой кнопкой от Delphi, которая имеет возможность изменения цветов? И заставить нашу новую кнопку посылать при ее нажатии

сообщение родной (которая под ней), что она (родная) нажата?!

Реализация:

Добавляем в основной модуль нашей ВК код

//определим свой тип на основе кнопки TJvNavPanelButton
// из замечательного набора компонент JEDI - рекомендую
type
  TBtn = class(TJvNavPanelButton)
 
private
  procedure BtnClick(Sender: TObject);
end;
// переопределяем родной OnClick TJvNavPanelButton
// на свою обработку - жмем родную 1С-кнопку на форме
procedure TBtn.BtnClick(Sender: TObject);
var
bt1C:hwnd;
begin
 // хэндл кнопки 1С, которую будем перекрывать нашей кнопкой
 
bt1C:=GetParent((Sender as TJvNavPanelButton).Parent.Handle);
 
// посылаем сообщение нажали/отпустили левую кнопку мыши - клик
 
SendMessage(bt1C,WM_LBUTTONDOWN,0,0);
 
SendMessage(bt1C,WM_LBUTTONUP,0,0);
end;

 

 

Прописываем нашу процедуру в ВК

// хэндл 1С-кнопки по её заголовку
function TMiracleClass.hButton(const Capt: WideString): Integer;
var
a: array [0..254] of ansichar;
begin
  
StrPCopy(@a,capt);
  
RESULT:=FindWindowEx(hReportDialog,0,'Button',a);
end;

procedure
TMiracleClass.SetButtonCaption(const Capt: WideString; ColorFrom,
 
ColorTo, FontColor: Integer);
var
TWC:TWinControl;
var
NewBt: TBtn;
var
r:TRect;
var
hB:hwnd;
begin

  hB:=hButton(Capt);
 
// строим TWinControl на весь размер 1С-кнопки
 
TWC:=TWinControl.CreateParented(hB);
 
GetWindowRect(hB,r);
 
TWC.UpdateControlState;
 
TWC.Top:=0;
 
TWC.Left:=0;
 
TWC.Width:=r.Right-r.Left;
 
TWC.Height:=r.Bottom-r.Top;
 
// строим нашу новую кнопку на весь TWinControl 
 
NewBt:=TBtn.Create(TWC);
 
NewBt.Parent:=TWC;
 
NewBt.Top:=0;
 
NewBt.Left:=0;
 
NewBt.Width:=TWC.Width;
 
NewBt.Height:=TWC.Height;
 
NewBt.Caption:=' '+Capt;
 
NewBt.Colors.ButtonColorFrom:=TColor(ColorFrom);
 
NewBt.Colors.ButtonHotColorFrom:=TColor(ColorFrom);
 
NewBt.Colors.ButtonSelectedColorFrom:=TColor(ColorFrom);
 
NewBt.Colors.ButtonColorTo:=TColor(ColorTo);
 
NewBt.Colors.ButtonHotColorTo:=TColor(ColorTo);
 
NewBt.Colors.ButtonSelectedColorTo:=TColor(ColorTo);
 
NewBt.Visible:=true;
 
NewBt.Font.Color:=TColor(FontColor);
 
// переопределям OnClick новой кнопки на "нажатие" 1С-кнопки
 
NewBt.OnClick:=NewBt.BtnClick;
end;

 

 

 

 

 

См. также

1С:Фото номенклатуры 7.7 - решение для работы с фотографиями номенклатуры в 1С:7.7 (включая формат PNG)

Работа с интерфейсом Логистика, склад и ТМЦ Платформа 1С v7.7 1С:Торговля и склад 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Решение для разработчика и конечного пользователя для работы с фотографиями номенклатуры: систематизация, хранение, отображение, а также выгрузка на Яндекс-Диск и FTP (кроме версии лайт). Поддерживаются графические форматы: bmp, jpg, gif, tiff, а также png - не поддерживаемый штатными средствами 1С. Выполнено без использования внешних компонент (кроме функции выгрузки на FTP). Поставляется как в виде пустой конфигурации с набором объектов и модулей для работы с фото, так и в виде обновления к 1С:Торговля и склад 7.7. Выполнено в двух версиях: "полная" и "лайт".

5000 руб.

18.10.2022    5162    1    45    

3

WebЦвета для 1с77 FormEx

Инструментарий разработчика Работа с интерфейсом Платформа 1С v7.7 Абонемент ($m)

Обработка с фрагментами кода для программного использования набора цветов из коллекции WebЦвета 1с версии 8+ в 1с версии 77. Требуется предварительное подключение сторонней библиотеки FormEх. Будет полезно программистам 1с 77, 1с 8. Да и вообще при программировании на любом языке при потребности использовать коллекцию цветов WebЦвета.

1 стартмани

30.03.2022    4543    2    igor7777    4    

5

К привязкам элементов форм (1С 7.7, FormEx)

Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Бесплатно (free)

Публикация имеет цель обратить внимание на возможность улучшения интерфейса.

15.12.2021    4467    62    Cерый    13    

6

Выбор цвета для 1С 7.7

Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Простая и удобная внешняя обработка для выбора цвета без применения внешних компонент.

1 стартмани

09.06.2020    7025    3    vap_pig    5    

3

Производственный календарь для 1С 7.7

Учет рабочего времени Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

Обработка производственного календаря с возможностью импорта и экспорта xls для 1С 7.7 (7.70.027) без изменения конфигурации.

1 стартмани

18.09.2019    12580    6    Jill    8    

3

Альтернативная обработка "Выбор периода"

Работа с интерфейсом Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Альтернативная обработка ввода периода для 1С 7.7.

1 стартмани

27.03.2019    6588    3    v.a.n-    11    

2

Несколько табличных частей в 1С:7.7 - это просто

Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..

1 стартмани

01.05.2018    22421    27    Gkmy    11    

5
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. vasilykushnir 63 20.08.10 14:31 Сейчас в теме
Я просто в шорохе от реализации. Оказывается все гениальное - просто. ;)
2. Abadonna 3958 20.08.10 14:32 Сейчас в теме
(1) Но не все простое гениально :D
3. Ёпрст 1063 20.08.10 15:05 Сейчас в теме
А можно просто натянуть активикс на кнопку и привет, будет хоть круглая:
4. Abadonna 3958 20.08.10 15:31 Сейчас в теме
(3)Угу. Но актив-икс на кнопочку все равно ж dll-кой натягивать (в 7.7)
5. Ёпрст 1063 20.08.10 15:43 Сейчас в теме
(4) ну да..
эт просто к тому, что способы есть разные :)

Можно еще тупо картинку на форму кинуть.. типо "псевдо кнопка". Тогда вообще без ВК можно обойтись.
6. Abadonna 3958 20.08.10 15:46 Сейчас в теме
(5) Кушнир у меня счастлив и ладно ;) Это ему хотелось.
О чем я теперь искренне сожалею :cry:
Я вообще терпеть всяких "гламуров" не могу, как-то строгий стиль больше по душе.
На вкус и цвет...
7. WEB 26.08.10 09:53 Сейчас в теме
У меня есть один вопрос: В методе TMiracleClass.hButton фигурирует переменная hReportDialog, но она нигде не объявлена. Если она является свойством класса TMiracleClass, то надо бы показать описание (секцию type) для этого класса, или просто писать self.hReportDialog ...
9. Abadonna 3958 26.08.10 13:27 Сейчас в теме
(7)
В методе TMiracleClass.hButton фигурирует переменная hReportDialog

Эта статья является продолжением статьи http://infostart.ru/public/73902/ , а там написано:
В статьях "Создание внешних компонент 1С для начинающих" (http://www.infostart.ru/public/14551/) и "Создание внешних компонент 1С для начинающих, часть 2" (http://www.infostart.ru/public/14556/) были рассмотрены методы внедрения визуальных компонент Дельфи на активную форму 1С (отчет, обработка, документ, справочник, журнал). В частности, там же рассмотрены методы получения хэндла "подложки" (hReportDialog), которая используется как родительское окно при внедрении компонента Дельфи

Каюсь, тут поленился дописать:(
10. Abadonna 3958 26.08.10 15:22 Сейчас в теме
13. holiday 27.02.21 00:41 Сейчас в теме
(10) ну, вот... скопипастить поленился, а теперь страница по этой ссылке удалена((
8. Boxa 26.08.10 11:25 Сейчас в теме
11. пользователь 16.11.10 10:57
Сообщение было скрыто модератором.
...
12. maxdot 15.12.10 23:31 Сейчас в теме
Оставьте свое сообщение