Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Вернуть свойства полей


Автор: Mona 12.11.2007, 19:33
Может быть, я спрошу что-то не то, но все-таки.
В отчете много элементов. У каждого свои top, left, height и т.д. Те, которые указаны прямо в конструкторе. На форматировании я меняю  эти параметры (например, делаю их все =0), а потом хочу вернуть то, что было. Это возможно? Наверное, я опять ищу легких путей, но вдруг возможно.


Автор: bopoha 12.11.2007, 20:14
Опять же при форматировании это можно вернуть обратно. Но уже для другой страницы.

Автор: Akina 12.11.2007, 21:53
Цитата(Mona @  12.11.2007,  20:33 Найти цитируемый пост)
На форматировании я меняю  эти параметры (например, делаю их все =0), а потом хочу вернуть то, что было. Это возможно?

Ну например перед тем как начинать курочить отчет, можно сохранять исходные значения параметров. Не?

Автор: Mona 13.11.2007, 07:36
Цитата

Ну например перед тем как начинать курочить отчет, можно сохранять исходные значения параметров. Не? 

Наверное, так и сделаю. Только элементов так много. 
Вобще в данном случае проблема у меня в том, что в заголовке группы при одном условии (первом форматировании) элементы стоят на своих местах, а при втором, третьем и т.д. меняют параметры и к первому условию я уже не возвращалась. И не было бы беды, но если после просмотра пустить на печать,  форматирование идет сначала, а все эти параметры  уже изменены и сами не возвращаются, как я ожидала.  Я понимаю, что все логично, но очень не удобно.

Автор: Akina 13.11.2007, 10:28
Цитата(Mona @  13.11.2007,  08:36 Найти цитируемый пост)
Наверное, так и сделаю. Только элементов так много. 


Код
' Draft code - idea only

Type lblArrayStruc
  lblName As String
  lblLeft As Integer
  lblTop As Integer
End Type

Dim tmpArray(0) As lblArrayStruc

' ...

For Each OneControl In Form.Controls
  If OneControl.Type = Label Then
    ReDim Preserve tmpArray(UBound(tmpArray)+1)
    tmpArray(UBound(tmpArray)).lblName = OneControl.Name
    tmpArray(UBound(tmpArray)).lblTop = OneControl.Top
    tmpArray(UBound(tmpArray)).lblLeft = OneControl.Left
  End If
Next

Автор: Mona 13.11.2007, 11:10
Спасибо.  Это очень даже хорошо.
Но тут  другая проблема. При запуске на печать не идет ни на Format, ни на Print, а куда?
Где мне их вернуть? Это же не переменную обнулить, мне же их надо форматировать в том месте, где они находятся. Скорее всего я не вижу чего-то очевидного, но у меня не получается.


Автор: Akina 13.11.2007, 11:17
Цитата(Mona @  13.11.2007,  12:10 Найти цитируемый пост)
Но тут  другая проблема.
Из того что написано дальше, я понял буквы, слова - но не понял смысл.

Автор: Mona 13.11.2007, 12:36
Какое событие происходит при запуске отчета на печать?

Автор: Akina 13.11.2007, 12:51
Цитата(Mona @  13.11.2007,  13:36 Найти цитируемый пост)
Какое событие происходит при запуске отчета на печать? 

Цитата

The Open event occurs before a report is previewed or printed.
The Page event occurs after Microsoft Access formats a page of a report for printing, but before the page is printed. 
The NoData event occurs after Microsoft Access formats a report for printing that has no data (the report is bound to an empty recordset), but before the report is printed. 


MSDN rulezzz!

Автор: Mona 13.11.2007, 15:10
Цитата

The Open event occurs before a report is previewed or printed.

Я же говорю, отчет уже открыт, и все страницы отформатированы. И теперь я его запускаю на печать. У меня не попадает ни на одно событие. 

Автор: Akina 13.11.2007, 15:19
Так и должно быть. Оно уже возникало в момент открытия превьюва. Его печать - это событие Application, а не Report.

Автор: kapbepucm 13.11.2007, 15:39
Mona, т.е., открыв отчёт в режиме Preview, ты хочешь, чтобы на бумаге отображалось нечто другое?

Автор: Mona 13.11.2007, 16:27
Цитата

Mona, т.е., открыв отчёт в режиме Preview, ты хочешь, чтобы на бумаге отображалось нечто другое? 


Как раз наоборот! Открыв отчет в режиме Preview я вижу одно, а печатается другое! А хотелось бы одно и то же. 
Я хочу попробовать рассказать, что происходит. У меня в заголовке группы есть элементы. На первой странице (при первом форматировании заголовка группы) они мне нужны в том виде, в котором я расположила их в конструкторе. На второй странице я им меняю параметры (visible,top, left итд), на третьей тоже. Когда я прохожу в режиме preview по всем страницам (все они отформатированы) параметры элементов сохраняются такими, какими я их сделала при последнем форматировании. 
Теперь сразу (не выходя из Preview) я запускаю на печать. И на первой странице (и на второй) на бумаге элементы отображаются в том виде, который на просмотре на последнем. 

Автор: Akina 13.11.2007, 16:38
Ну и правильно... конструктор - он ОДИН. На все листы. Есссно используется его последнее состояние.

Автор: bopoha 13.11.2007, 16:39
Не должно такого быть. Сам постоянно скрываю/отображаю элементы для каждой страницы. И печататеся так, как и отображается.
Код в студию.

Автор: Mona 13.11.2007, 17:18
Не должно такого быть. Сам постоянно скрываю/отображаю элементы для каждой страницы. И печататеся так, как и отображается.
Код в студию. 

Код слишком большой.
Вы создайте простой отчет на таблице из 10 записей (сгруппированных). В области данных одно поле. В нем данные - любое поле из таблицы. В нижнем колонтитуле Поле2 - свободное.

Код

Option Compare Database
Dim kol As Integer

Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
 kol = kol + 1
End Sub

Private Sub НижнийКолонтитул_Format(Cancel As Integer, FormatCount As Integer)
Поле2= kol
End Sub

На просмотре в Поле2 - 10, а что на бумаге?

Автор: Akina 13.11.2007, 17:29
Цитата(Mona @  13.11.2007,  18:18 Найти цитируемый пост)
Код слишком большой.
Вы создайте простой отчет на таблице из 10 записей (сгруппированных). В области данных одно поле. В нем данные - любое поле из таблицы. В нижнем колонтитуле Поле2 - свободное.

Только не он, а ВЫ проделайте это, и присоедините полученную БД, упакованную ЗИПом, к своему сообщению.

Автор: Mona 13.11.2007, 17:58
Цитата

Код в студию. 

Мой код слишком большой. Создайте простой отчет на таблице из 10 записей. В области данных одно поле. Данные для него - любое поле из таблицы. В нижнем колонтитуле одно поле - свободное.

Код

Dim kol As Integer
Private Sub Report_Open(Cancel As Integer)
 kol = 0
End Sub

Private Sub Нижнийколонтитул_Format(Cancel As Integer, FormatCount As Integer)
Поле2 = kol
End Sub

Private Sub ОбластьДанных_Format(Cancel As Integer, FormatCount As Integer)
 kol = kol + 1
End Sub
На просмотре в Поле2 - 10, а на печати(или в снимке) - что?

Я только что методом тыка вроде решила это
Код

Private Sub Нижнийколонтитул_Format(Cancel As Integer, FormatCount As Integer)
Поле2 = kol
If FormatCount = 1 Then kol = 0
End Sub


И в своем вроде вернула так же. Но не знаю действительно ли решила проблему.






Автор: Akina 13.11.2007, 18:23

M
Akina
Пользуйтесь тегом "Код"!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)