Страница: 1 |
Страница: 1 |
Вопрос: Помогите!!! Не могу правильно распечатать!!!
Добавлено: 28.03.07 11:11
Автор вопроса: HAB
У меня есть длинный рисунок в фрейме. Длина может достигать и до 300000. Мне нужно распечатать на листе а4 с альбомной ориентацией, и чтоб на каждом листе было по два рисунка. Как мне разделить все эти рисунки ???
Вот мой не рабочий код печати.
Dim hFrameDC As Long, oldmode As Long, R As Integer, t As Integer
oldmode = mat.ScaleMode
mat.ScaleMode = vbPixels
R = Val(FrM.Width / 12780)
t = 1
If R > 0 Then
For I = 1 To R
Load Pic(t)
Pic(t).Visible = False
Pic(t).Width = 12780
Pic(t).Height = FrM.Height
hFrameDC = GetDC(FrM.hwnd)
BitBlt Pic(t).hdc, 0, 0, 847 * t, 4710, hFrameDC, 847 * (t - 1), 0, vbSrcCopy
ReleaseDC FrM.hwnd, hFrameDC
Pic(t).Refresh
t = t + 1
Next I
Load Pic(t)
Pic(t).Width = 12780
Pic(t).Height = FrM.Height
hFrameDC = GetDC(FrM.hwnd)
BitBlt Pic(t).hdc, 0, 0, 847 * t, 4710, hFrameDC, 847 * (t - 1), 0, vbSrcCopy
ReleaseDC FrM.hwnd, hFrameDC
Pic(t).Refresh
Else
Load Pic(t)
Pic(t).Visible = False
Pic(t).Width = FrM.Width
Pic(t).Height = FrM.Height
hFrameDC = GetDC(FrM.hwnd)
BitBlt Pic(t).hdc, 0, 0, 847, 4710, hFrameDC, 0, 0, vbSrcCopy
ReleaseDC FrM.hwnd, hFrameDC
Pic(t).Refresh
t = t + 1
End If
mat.ScaleMode = oldmode
Printer.ScaleMode = 2
Printer.Orientation = 2
If R = 0 Then
Printer.Print
Printer.PaintPicture Pic(1).Image, 10, 10
Printer.EndDoc
Exit Sub
End If
If R > 0 Then
For I = 1 To R Step 2
Printer.Print
Printer.PaintPicture Pic(I).Image, 10, 10
Printer.PaintPicture Pic(I + 1).Image, 10, 300
If I <> R Then Printer.NewPage
Next I
Printer.EndDoc
End If
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
Visual Basic .NET 2005 Пиратская версия
Вопросов: 38
Ответов: 190
Web-сайт:
Профиль | | #1
Добавлено: 28.03.07 12:52
А какую ошибку он выдает?
Номер ответа: 2
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #2
Добавлено: 28.03.07 13:27
300000 чего?
Номер ответа: 3
Автор ответа:
HAB
Вопросов: 18
Ответов: 57
Профиль | | #3
Добавлено: 28.03.07 13:57
Номер ответа: 4
Автор ответа:
HAB
Вопросов: 18
Ответов: 57
Профиль | | #4
Добавлено: 28.03.07 13:58
Номер ответа: 5
Автор ответа:
Visual Basic .NET 2005 Пиратская версия
Вопросов: 38
Ответов: 190
Web-сайт:
Профиль | | #5
Добавлено: 28.03.07 14:33
Если не делится может слишком длинное число. Бери long или качай ActiveX-ы для работы с длинными числами.
Номер ответа: 6
Автор ответа:
HAB
Вопросов: 18
Ответов: 57
Профиль | | #6
Добавлено: 28.03.07 15:01
Я не правильно обясняю +) . Фрайм длинной в 30000 пикселей. Естевстенно если его распечатать он на альбомном листе не поместиться. Поэтому у меня стоит задача фрейм разбить и распечать на листе сразу два фрейма. Для этого я хотел загрузить в picturebox по определенную длину фрейма и распечатать его. Может это можно сделать и по другому, но я не знаю как . Вот я жду чтоб мне кто нить подсказал приемлимый алгоритм.
Номер ответа: 7
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #7
Добавлено: 28.03.07 18:21
чей то какой то мутный у тебя код. Цифры каие-то непонятные... А алгоритм прост:
Отправляй при помощи BitBlt рисуок на принтер кусочками в соответствии с размерами листа. Собственно и всех делов.
Номер ответа: 8
Автор ответа:
HAB
Вопросов: 18
Ответов: 57
Профиль | | #8
Добавлено: 29.03.07 09:03
Собственно я так и делаю. Но проблема в том что я не могу BitBlt скопировать определенную часть рисунка.
Номер ответа: 9
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #9
Добавлено: 29.03.07 10:03
Что значит не можешь? Это как? Что мешает мочь?
Номер ответа: 10
Автор ответа:
HAB
Вопросов: 18
Ответов: 57
Профиль | | #10
Добавлено: 29.03.07 10:11
Номер ответа: 11
Автор ответа:
Visual Basic .NET 2005 Пиратская версия
Вопросов: 38
Ответов: 190
Web-сайт:
Профиль | | #11
Добавлено: 29.03.07 16:05
Google or MSDN в помощь. Щас сайтов по ВБ-миллион. По С++ - 0.
Номер ответа: 12
Автор ответа:
Visual Basic .NET 2005 Пиратская версия
Вопросов: 38
Ответов: 190
Web-сайт:
Профиль | | #12
Добавлено: 29.03.07 16:06
ошибся. надо так-