Вопрос № 118036: Здравствуйте, уважаемые эксперты. Столкнулся со следующей проблемой и надеюсь на Вашу помощь.
Есть форма, на которой находятся несколько Label и Memo со скролингом.
Необходимо вывести данные на печать. Если данных немного в Memo, то
можно...Вопрос № 118075: Здравствуйсте, дорогие Эксперты! Объясните, пожалуйста, как работает ProgressBar! И как, и с чем его можно использовать?...
Вопрос № 118.036
Здравствуйте, уважаемые эксперты. Столкнулся со следующей проблемой и надеюсь на Вашу помощь.
Есть форма, на которой находятся несколько Label и Memo со скролингом.
Необходимо вывести данные на печать. Если данных немного в Memo, то
можно в принципе воспользоваться Form1.Print. Ну а если нет, то при
этом подходе выводятся только видимые данные, а нужно все.
Какие у Вас есть идеи по этому поводу, может ссылки...
Заранее благодарен.
P.S. Delphi 7
Отправлен: 11.01.2008, 20:43
Вопрос задал: Sanya (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Raptor3
Здравствуйте, Sanya!
Я бы сделал так - данные с лейблов запихнул в мемо (Memo1.Lines.Add(Label1.Caption))
А для вывода на печать использовал бы ниже приведенную процедуру
P.S. Printers подрубить треба и TPrintDialog кинуть на форму, предварительно найдя его во вкладке Dialogs
Приложение:
--------- Программист - это человек который решает проблему, о которой вы не знаете, способом который вы не понимаете
Ответ отправил: Raptor3 (статус: 4-ый класс)
Ответ отправлен: 11.01.2008, 21:42 Оценка за ответ: 5 Комментарий оценки: Спасибо. Довольно интересная идея :)
Отвечает: Markedone
Здравствуйте, Sanya!
Вот проца печатающая Memo.
П раздел Uses должен быть подключен модуль Printers.
Приложение:
Ответ отправил: Markedone (статус: 3-ий класс)
Ответ отправлен: 12.01.2008, 16:36 Оценка за ответ: 5 Комментарий оценки: Спасибо за ответ с комментариями. Очень мне помогло при разборе листинга :)
Отвечает: Евсюков Виталий Евгеньевич
Здравствуйте, Sanya!
Работа с принтеров в дельфи традиционно (отнюдь идея не интересна и не нова) ведется через AssignPrn либо через объект Printer. Откройте, в конце концов, хелп!
--------- I Aear can ve na Mar
Ответ отправил: Евсюков Виталий Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 13.01.2008, 03:55 Оценка за ответ: 4 Комментарий оценки: Спасибо за содействие. Но у предыдущих экспертов ответы были более содержательные...
Вопрос № 118.075
Здравствуйсте, дорогие Эксперты! Объясните, пожалуйста, как работает ProgressBar! И как, и с чем его можно использовать?
Отправлен: 12.01.2008, 06:10
Вопрос задал: Demid (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: DimonSoft
Здравствуйте, Demid!
Ничего сложного там нет. На самом деле на первое время будет достаточно знать только несколько основных вещей...
Основные свойства (properties) ProgressBar'а - это Min, Max и Position. Это целые значения, первые два из которых задают границы, а третье - текущее состояние того, что Вы хотите отобразить в виде ProgressBar'а. Приведу пример...
Предположим, Вы хотите найти сумму чисел от 1 до 1000000, не используя формулы суммы арифметической прогрессии (т.е. просо перебирая все числа из промежутка). Тогда код получится приблизительно таким, как в приложении...
Опишу, что же делает приведённый фрагмент программы. Есть некий ProgressBar с именем SomeProgressBar, объявлены переменные Sum - для хранения уже найденной суммы - и i - для перебора натуральных чисел, которые должны быть включены в искомую сумму. Если говорить о "физическом" смысле ProgressBar'а, то в нём мы отображаем в данном конкретном случае количество добавленных к сумме чисел. Перед циклом задаём границы, в которых будет колебать значение, по которому мы собираемся определять состояние выполняемого
нами действия, а также указываем, что в настоящее время (т.е. до начала работы цикла) мы не добавили ни одного числа. Кроме того, действие из разряда рекомендуемых и считающихся хорошим тоном: задаём начальное значение переменной Sum. Такое подход позволяет впоследствии использовать этот фрагмент кода в неизменном виде не только в качестве отдельной процедуры, но и в виде части другого действия.
Собственно цикл. От 1 до 1000000. Переменную Sum увеличиваем на текущее число (i равное 1, 2, 3, ..., 999999, 1000000). Проставляем значение Position нашего ProgressBar'а равным i, т.е. мы добавили к сумме i чисел. Последнее действие в теле цикла - это Application.ProcessMessages. Вызов этого метода позволяет, если говорить упрощённо в примении к данной конкретной задаче, сделать изменения в ProgressBar'е заметными. Приведённый пример, вообще говоря, в ProgressBar'е вряд ли нуждается, т.к. выполнится очень быстро.
Но если Вы будете использовать этот контрол в реальной программе, то _б_е_з_ ProcessMessages увидите только два положения ProgressBar'а: начальное ("пустой") и конечное ("заполненный"), тогда как _с_ ним изменения будут видны.
Уточню на всякий случай несколько моментов. Во-первых, как и в случае с другими компонентами, необязательно задавать значения свойств прямо в тексте программы (если они не будут нигде меняться, их лучше указать в Object Inspector'е во время проектирования интерфейса), если значения всё же задаются по ходу выполнения программы, то понятно, что их необязательно задавать числом, это может быть просто переменная Byte, Word, LongWord, Integer, Cardinal, DWORD (который идентичен LongWord) и т.д. - любой целый тип.
Есть также второй способ, о котором я расскажу лишь вкратце, поскольку на практике он, как правило, не очень удобен. Можно, как и в первом случае, задать значения Min и Max, и кроме того установить значение Step - шаг, с которым будет происходить изменение показаний ProgressBar'а. В дальнейшем, когда выполнен очередной блок действий, соответствующий Step'у, вызываем метод StepIt.
Третий способ, не требующий задания значения свойству Step, но редко ипользуемый на практике - это использование метода StepBy, который позволяет указать, на сколько нужно "сдвинуть" показания ProgressBar'а. Из того, что в качестве параметра этот метод принимает Integer-значение, могу предположить, что, передав отрицательное значение, Вы сможете уменьшить показания ProgressBar'а.
Последний штрих к описанию того, что имеет отношение непосредственно к TProgressBar и чего нет у других компонентов. Используя свойство Smooth, можно задать способ отображения пргресса (сплошной линией или отдельными "блоками"), а используя свойство Orientation - то, в каком направлении будет "закрашиваться" ProgressBar (слева направо или сверху вниз).
С уважением, DimonSoft.
Приложение:
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 12.01.2008, 11:56 Оценка за ответ: 5 Комментарий оценки: Спасибо БОЛЬШОЕ DimonSoft!!! Очень хороший и развёрнутый ответ. На самом деле оказалось всё просто:) Не знаю как я сам не догадался?..
Отвечает: Genia007
Здравствуйте, Demid!
ProgressBar используется для отображения хода каких-либо долгих процессов или вычислений. Использовать его можно напару с таймером к примеру так: когда нужно запускаете таймер и пишете в событии таймера OnTimer.
if progressbar1.Position=progressbar1.Max then
progressbar1.Position:=0
else
progressbar1.Position:=progressbar1.Position+1;
Ответ отправил: Genia007 (статус: 4-ый класс)
Ответ отправлен: 15.01.2008, 12:06 Оценка за ответ: 4