Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» VBA for Access

Автор: novo_again
Дата сообщения: 19.05.2011 11:02
Вопрос по условному форматированию.

Как по "лучшим практикам" обходится ограничение только на 4 условия, в зависимости от которых меняется оформление объекта? Может быть, можно замутить собственный Class Module со своими свойствами? Но что-то не представляю, как это можно сделать для обычного TextBox...
Автор: asbo
Дата сообщения: 19.05.2011 11:27
novo_again, не знаю за необходимость Class Module... Но где-то я ужЕ писал, что предпочитаю всевозможные (как текущие, так и дефолтные) свойства контролов задавать непосредственно в коде и не использовать их встроенные фичи. Также, как и не использую их встроенные, нативные связи с источниками данных, а передавать в них данные напрямую.
Автор: novo_again
Дата сообщения: 19.05.2011 11:31
asbo
Спасибо за ответ! А разве даже на уровне кода количество в семействе FormatConditions collection не ограничено четырью?
Автор: asbo
Дата сообщения: 19.05.2011 11:58
novo_again, не знаю (да и не хочу знать :). Наверное ограничено. Я клоню к тому, чтобы не использовать FormatConditions вообще. Имо, этот FormatConditions не облегчение, а усложнение жизни. Почему те же самые параметры форматирования не задавать дискретно по тем или иным условиям, прописываемым ручками?
Автор: novo_again
Дата сообщения: 19.05.2011 12:24
asbo
Ок, код - это понятно. Не понятно вот что. Если Вы для AfterUpdate пропишите изменение оформления в зависимости от значения контроля - оно поменяется для всех контролей для каждой строчки данных одинаково, разве нет?
Автор: asbo
Дата сообщения: 19.05.2011 13:00
novo_again

Цитата:
Если Вы для AfterUpdate пропишите изменение оформления в зависимости от значения контроля - оно поменяется для всех контролей для каждой строчки данных одинаково, разве нет?

Почему-то имено AfterUpdate... Update чего? Некие "строчки данных"... Я же не знаю Вашу задачу и ее реализацию. Не совсем понимаю, о чем Вы :(
Автор: novo_again
Дата сообщения: 19.05.2011 13:14
asbo
Задача такая: есть таблица с полем Value. В ней в указанном поле содержатся 5 строк данных: числа 1, 2, 3, 4 и 5. Есть форма типа ContinuousForm - это та, где строчки данных идут одна за одной снизу вверх. В форме есть TextBox, отобрающий значение поля Value таблицы. Нужно чтобы, когда в TextBox стоит 1, цвет TextBox был бы один, 2 - второй, 3 - третий, 4 - четвертый и если стоит 5 - пятый цвет. Вот и вся задачка)

Добавлено:
_http://www.lebans.com/formatbycriteria.htm
чумачечий чел... ради подобной задачи зафигачить такого монстра с кучей функций из отдельных библиотек... блин, что-то мне подсказывает, что все грустно)
Автор: asbo
Дата сообщения: 19.05.2011 14:40
Ну тогда понятно. Ленточная форма. Тут никуда от него не деться - от FormatConditions. Я-то думал одиночные контролы... В коде поэкспериментировал - не дает больше 4-х создавать. Навскидку в рунете пошарил - ничего не попалось утешающего.

Автор: novo_again
Дата сообщения: 19.05.2011 14:44
asbo
Есть - см. предыдущий пост про _http://www.lebans.com/formatbycriteria.htm))) Даже подрываться на такой эксперимент страшновато, не умею ничем кроме библиотечки для открытия файла пользоваться.
Автор: asbo
Дата сообщения: 19.05.2011 14:53
novo_again, да, я уже взглянул, снкс. В закладки положил, хоть и далек я от всех этих красивостей :)
Автор: novo_again
Дата сообщения: 19.05.2011 15:28
_http://ureader.com/msg/104366694.aspx

вот еще. какая-то хрень с подстановкой прозрачных контролов с терминальным шрифтом. скорее всего помочь должна - без монструозности. становится веселее.
Автор: asbo
Дата сообщения: 19.05.2011 15:51
novo_again, я в той переписке вот эту ссылку нашел. Но там идет отказ от ленточной формы в пользу FlexGrid. Скачал, в код посмотрел - не в лоб :(( совсем не в лоб. Наворочано - будь здоров. Нужен мощный стимул заниматься этим :)

Добавлено:
Кстати - это неплохой ресурс со множеством примеров от профессионалов и не только.
Автор: novo_again
Дата сообщения: 19.05.2011 16:03
Всё коллеги, элегантное решение от некоего Dirk Goldgar из самого низа поста на _http://ureader.com/msg/104366694.aspx найдено - проверено, работает!!!

Итак:
"Одним из путей решить данную задачу без использования conditional formatting - это применение наборов рассчитываемых text boxes, которые имеют свойства disabled and locked и помещены позади контролов в detail section. Каждый из этих text boxes должен иметь следующие свойства: Back Style: Transparent; Font Name: Terminal; Font Size: (достаточно большой для полного заполнения высоты text box); Fore Color: (ваш цвет); Control Source: =IIf(<условие для активирования цвета>, String(255,219),Null)".

Автор: asbo
Дата сообщения: 19.05.2011 16:41
novo_again, я идею-то понял. Но у меня не работает. Выложите пример, плз.
Автор: novo_again
Дата сообщения: 19.05.2011 16:46
asbo
А что конкретно не работает? Если честно, с несколькими цветами я еще не экспериментировал. Все, что сделал пока: создал текстбокс, выставил свойства, ввел формулу, открыл форму - цвет действительно появляется в зависимости от значения одного из полей...
Автор: asbo
Дата сообщения: 19.05.2011 17:12
Позади - нет смысла помещать. Закрывается основным полем. Если спереди - символы-то непрозрачные... Закрывают содержимое основного поля.

Добавлено:
У меня тоже условие выполняется.

Но как туда много условий-то впихнуть? На ограничение длины строки не натолкнемся?
Автор: novo_again
Дата сообщения: 19.05.2011 17:24
asbo

Цитата:
Но как туда много условий-то впихнуть? На ограничение длины строки не натолкнемся?

Н-да-а... Про много условий проблем нет - нужно сделать столько боксов, сколько нужно цветов. Они друг на друге могут без проблем валяться - это я уже проверил. В каждый бокс - IIf c условием для его включения. В принципе, мне как раз сигнализатор-светофор без текста и нужен был. С текстом или неудача или нужно повозиться...

Кстати, что такое "ЫЫЫЫ"?)) Там шрифт должен быть Terminal.
Автор: asbo
Дата сообщения: 19.05.2011 17:55
novo_again, нет у меня Terminal в списке - просто руками вписал. В результате - "ЫЫЫ". Подстановка шрифтов какая-то.

* сигнализатор-светофор без текста
Что-то я не пойму - как без текста-то, если за счет него и задумана подстветка?

* столько боксов, сколько нужно цветов
Хренануться легче :) Мне это ужЕ не нравится.

Все получилось. Фон и у бокса и поля - прозрачный. Бокс на задний план, подбираем шрифт, чтобы сплошняком залить. Поле - на передний план. Размер тик-в-тик надо делать.


Добавлено:

Цитата:
Мне это ужЕ не нравится

И однобокое такое форматирование - только подсветкой... Ни тебе жирного-курсива, ни цвета шрифта :((
Автор: novo_again
Дата сообщения: 19.05.2011 18:18

Цитата:
Бокс на задний план

Какие-то специальные действия для этого нужно делать? У меня все-равно подсветка все засвечивает ((

Добавлено:

Цитата:
Какие-то специальные действия для этого нужно делать?

Сам догадался - просто сначала нужно тащить на форму то, что пойдет обоями, потом - то, что будет сверху.


Цитата:
И однобокое такое форматирование - только подсветкой... Ни тебе жирного-курсива, ни цвета шрифта :((

По поводу убогости самого метода согласен. Но вот побаловаться с жирнотой и всем прочим можно - просто нужно вообще не использовать поле и напихать на форму только боксы. Сами боксы при выполнении условий будут либо что-то показывать уже отформатированное со значением из поля, либо будут принимать значение Null. Если комбинаций немного - можно использовать.
Просто это как раз мой случай - когда для полного счастья не хватате всего лишь одного цвета.


Цитата:
Что-то я не пойму - как без текста-то, если за счет него и задумана подстветка?

Я имел в виду текст осмысленный из поля, а не тот, который для покраски)))

Все, пора заканчивать...
Автор: asbo
Дата сообщения: 19.05.2011 18:33
* специальные действия
Выделяешь контрол, Меню - Формат - На задний (передний) план.
Можно через "Настройка панели инструментов" из раздела "Конструктор форм и отчетов" вытащить эти кнопки.
Автор: novo_again
Дата сообщения: 19.05.2011 18:42
asbo
Спасибо тебе, золотой ты человек!))
Автор: asbo
Дата сообщения: 19.05.2011 20:06
novo_again :))
Вы меня вгоняете в краску. Делаю прозрачный фон и на задний план :)
Автор: novo_again
Дата сообщения: 23.05.2011 07:45
Народ, никто не знает, случаем: если для субформы запретить добавление записей, как сделать так, чтобы при открытии формы ее место не было бы пустым?... Просто записи и все поля начинают отражаться только тогда, когда субформа начинает видеть что-то в главной форме, то есть когда тыкаешь на какую-нибудь запись...
Автор: asbo
Дата сообщения: 23.05.2011 08:23
Давно это было, но я не помню таких эффектов. Рекурсия какая-нибудь? Или не отбитые ".Echo False" или ".Visible"?
Автор: novo_again
Дата сообщения: 23.05.2011 08:36
Что то мне подсказывает, что это така фича: раз нельзя добавлять, значит и нехрен пялиться, дабы не тщить юзера надеждой)
Автор: asbo
Дата сообщения: 23.05.2011 09:21
Обычно решают обратную задачу - скрыть от юзера все до полной загрузки и только потом отобразить.

Добавлено:
У меня такой же эффект. Пустая главная, в ней ленточная суб с запретом на добавление.
Автор: novo_again
Дата сообщения: 23.05.2011 09:34
Остаются пляски с бубнами или разрешить дополнение записей и дизейблить сами поля ввода. Просто когда форма с сабформой загружается - сабформа показывает данные наобум с самого начала. Запрещаешь добавление записей - данные с полями улетучиваются до момента пока не встанешь на ключевой контрол на основной форме(
Автор: asbo
Дата сообщения: 23.05.2011 09:47
novo_again, поэкспериментировал. Странно, но первого эффекта (воспроизведение твоего случая) снова добиться не смог. Думаю, что это зависит от этапа, на котором выставляешь запрет на добавление в суб. Сейчас все нормально отображает. Запрет в суб можно снимать-ставить. С полями не колдуй - у меня пустая главная и простая ленточная суб. Больше ничего. Создай с нуля, не визардом, конструктором отдельно главную, отдельно суб. Потом суб забрось в главную и будет все ОК. Я _та_к думаю :)
Автор: novo_again
Дата сообщения: 23.05.2011 09:53
Подсказка хорошая - добраться бы теперь до машины)
Автор: novo_again
Дата сообщения: 25.05.2011 11:21

Цитата:
Странно, но первого эффекта (воспроизведение твоего случая) снова добиться не смог.

Весь секрет в том, что в MasterField зашито значение ListBox, а не поля.

Наткнулся на еще одну проблему - при выводе на печать, зараза, печатаются одни "Ы"((( Хотя шрифт в свойствах принтера поставил не встроенный, а загружаемый.

Блин, неужели нет такого символа, чтобы был как кирпичик?...

Добавлено:

Цитата:
Всё коллеги, элегантное решение от некоего Dirk Goldgar из самого низа поста на _http://ureader.com/msg/104366694.aspx найдено - проверено, работает!!!


После проблем с распечаткой буквы "Ы" понял, что этот Дирк пошел не совсем простым путем. Мягко говоря.

Более лаконично будет так:
- создаем на форме текстбоксы по количеству необходимых цветов,
- красим их во все необходимые варианты цвета,
- для них и для тех полей, которые нужно подсветить, границу и фон делаем Transparent, и делаем по размеру и по положению их все одинаковыми один над другим,
- главное подсвечиваемое поле делаем Меню/Формат/На передний план (как то так),
- для цветовых ящиков значение CountrolSource пишем: =IIf(условие для включения цвета,String(255," "),Null),
- для всех цветовых боксов делаем возможным сжатие/расширение в свойствах.

Всё.

Страницы: 1234567891011121314151617

Предыдущая тема: Delphi+ADO


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.