Изменяем вид кнопок на форме 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С v7.7 1C77 Абонемент ($m)

Часто встречающаяся проблема: потерялось Окно сообщений. Обработка исправляет эту "проблему" одним нажатием кнопки. Для обычных пользователей. Не требует программирования. Достаточно запустить обработку и нажать кнопку "Выполнить".

5 стартмани

17.01.2025    338    1    CheBurator    11    

6

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

Создание и использование на формах в среде 1С 7.7 прогрессбара, индикатора, как в 1С 8.Х для контроля над длительными процессами. Реализовано средствами языка программирования 1С 7.7.

1 стартмани

06.06.2024    865    1    user1416274    17    

2

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

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

2500 руб.

18.10.2022    6022    1    45    

4

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

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

1 стартмани

30.03.2022    5150    2    igor7777    4    

6

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

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

15.12.2021    5036    77    Cерый    13    

8

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

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

1 стартмани

09.06.2020    7571    4    vap_pig    5    

4

Учет рабочего времени Работа с интерфейсом Программист Бухгалтер Пользователь Платформа 1С v7.7 1C77 Россия Абонемент ($m)

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

1 стартмани

18.09.2019    13238    6    Jill    8    

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

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