Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Помогите!!! Не могу правильно распечатать!!!
     
    
Добавлено: 28.03.07 11:11
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
     HAB
  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 Пиратская версия
 Visual Basic .NET 2005 Пиратская версия


Вопросов: 38
Ответов: 190
      
 Web-сайт:  
 Профиль |  | #1
      
Добавлено:  28.03.07 12:52
       
    
       
  
А какую ошибку он выдает?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа: Viper
 Viper



ICQ: 249094859 
Вопросов: 0
Ответов: 310
      
 Профиль |  | #2
       
Добавлено:  28.03.07 13:27
       
    
       
  
300000 чего?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа: HAB
  HAB 






Вопросов: 18
Ответов: 57
      
 Профиль |  | #3
       
Добавлено:  28.03.07 13:57
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа: HAB
  HAB 






Вопросов: 18
Ответов: 57
      
 Профиль |  | #4
       
Добавлено:  28.03.07 13:58
       
    
       
  
 
     Хоть пикселей
 Хоть пикселей  . Хоть твипов. Этот размер меняеться. И может быть маленький а может быть и очень большим.
. Хоть твипов. Этот размер меняеться. И может быть маленький а может быть и очень большим.
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа: Visual Basic .NET 2005 Пиратская версия
 Visual Basic .NET 2005 Пиратская версия


Вопросов: 38
Ответов: 190
      
 Web-сайт:  
 Профиль |  | #5
      
Добавлено:  28.03.07 14:33
       
    
       
  
 
    
Если не делится может слишком длинное число. Бери long или качай ActiveX-ы для работы с длинными числами.
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа: HAB
  HAB 






Вопросов: 18
Ответов: 57
      
 Профиль |  | #6
       
Добавлено:  28.03.07 15:01
       
    
       
  
Я не правильно обясняю +) . Фрайм длинной в 30000 пикселей. Естевстенно если его распечатать он на альбомном листе не поместиться. Поэтому у меня стоит задача фрейм разбить и распечать на листе сразу два фрейма. Для этого я хотел загрузить в picturebox по определенную длину фрейма и распечатать его. Может это можно сделать и по другому, но я не знаю как  
     . Вот я жду чтоб мне кто нить подсказал приемлимый алгоритм.
. Вот я жду чтоб мне кто нить подсказал приемлимый алгоритм.
		
	  
			 
	
		 
    
       
    
Номер ответа: 7 
      
Автор ответа: Viper
 Viper



ICQ: 249094859 
Вопросов: 0
Ответов: 310
      
 Профиль |  | #7
       
Добавлено:  28.03.07 18:21
       
    
       
  
чей то какой то мутный у тебя код. Цифры каие-то непонятные... А алгоритм прост:
 
    
Отправляй при помощи BitBlt рисуок на принтер кусочками в соответствии с размерами листа. Собственно и всех делов.
		
	  
			 
	
		 
    
       
    
Номер ответа: 8 
      
Автор ответа: HAB
  HAB 






Вопросов: 18
Ответов: 57
      
 Профиль |  | #8
       
Добавлено:  29.03.07 09:03
       
    
       
  
 
    
Собственно я так и делаю. Но проблема в том что я не могу BitBlt скопировать определенную часть рисунка. 
		
	  
			 
	
		 
    
       
    
Номер ответа: 9 
      
Автор ответа: Viper
 Viper



ICQ: 249094859 
Вопросов: 0
Ответов: 310
      
 Профиль |  | #9
       
Добавлено:  29.03.07 10:03
       
    
       
  
Что значит не можешь? Это как? Что мешает мочь?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 10 
      
Автор ответа: HAB
  HAB 






Вопросов: 18
Ответов: 57
      
 Профиль |  | #10
       
Добавлено:  29.03.07 10:11
       
    
       
  
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 11 
      
Автор ответа: Visual Basic .NET 2005 Пиратская версия
 Visual Basic .NET 2005 Пиратская версия


Вопросов: 38
Ответов: 190
      
 Web-сайт:  
 Профиль |  | #11
      
Добавлено:  29.03.07 16:05
       
    
       
  
 
    
Google or MSDN в помощь. Щас сайтов по ВБ-миллион. По С++ - 0.
		
	  
			 
	
		 
    
       
    
Номер ответа: 12 
      
Автор ответа: Visual Basic .NET 2005 Пиратская версия
 Visual Basic .NET 2005 Пиратская версия


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