Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: ex3mos.ucoz.ru
 Профиль | | #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
300000 чего?
Все равно =) Хоть пикселей =). Хоть твипов. Этот размер меняеться. И может быть маленький а может быть и очень большим.

Ответить

Номер ответа: 5
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #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 рисуок на принтер кусочками в соответствии с размерами листа. Собственно и всех делов.

Собственно я так и делаю. Но проблема в том что я не могу 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-сайт: ex3mos.ucoz.ru
 Профиль | | #11
Добавлено: 29.03.07 16:05
Я не знаю как !!!

Google or MSDN в помощь. Щас сайтов по ВБ-миллион. По С++ - 0.

Ответить

Номер ответа: 12
Автор ответа:
 Visual Basic .NET 2005 Пиратская версия



Вопросов: 38
Ответов: 190
 Web-сайт: ex3mos.ucoz.ru
 Профиль | | #12
Добавлено: 29.03.07 16:06
ошибся. надо так-
Я не знаю как

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам