Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6 + win7 + SetTextJustification / 16 сообщений из 16, страница 1 из 1
11.09.2012, 10:18
    #37952087
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Доброго времени суток всем!

Собратья, помогите советом или делом или еще чем-нибудь.
Дело такое:
В программе на VB6 для печати неких документов используется api-функция SetTextJustification для выравнивания текста по ширине. До недавнего времени, пока программа запускалась на ХР, все было замечательно, так как функция прекрасно выполняла свою задачу как при выводе текста на принтер, так и при выводе его же на экранную форму. Теперь же, с переходом на Windows 7, происходит что-то непонятное. Функция прекрасно отрабатывает при выводе текста на экранную форму, но ничего не делает при выводе на принтер (причем, не важно какой: реальный или виртуальный, типа MS Image Writer или какой-нить goPdf). Кто-нибудь сталкивался с подобной проблемой? Или есть какие-нибудь соображения по этому поводу?

...and the Hades came close behind him... (Revelations 6:8)
...
Рейтинг: 0 / 0
11.09.2012, 11:39
    #37952233
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Win7 и VB6 - непонятное сочетание. Надо что то менять.
...
Рейтинг: 0 / 0
11.09.2012, 12:35
    #37952356
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Есть более конструктивные и менее схоластические идеи?
...
Рейтинг: 0 / 0
11.09.2012, 12:43
    #37952378
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Есть. А есть что то конкретное в коде? Что за программа и зачем она нужна? Почему апи? И зачем VB6? На Win7 многое работает не так как на хрюше.
...
Рейтинг: 0 / 0
11.09.2012, 13:39
    #37952534
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
VB6 - потому что так исторически сложилось )
Программа нужна, как уже говорилось, для печати документов.
API-функция - потому что по-другому сделать выключку никак нельзя. Вру, можно, но для этого потребуется провести злобные вычисления положения каждого слова (или буквы) в каждой строке блока текста с учетом ширины пробелов так, чтобы блок текста выравнивался по ширине.

Объявлено так:
Код: vbnet
1.
Private Declare Function SetTextJustification& Lib "gdi32" (ByVal hDC As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long)



Вызывается так:
Код: vbnet
1.
2.
3.
SetTextJustification(DC, LineWidth - CalcStringSize(DC, OutputString).X, BreakCharCount)
DrawText DC, OutputStringWrite, Len(OutputStringWrite), currRect, lA
SetTextJustification DC, 0, 0



если DC = Form1.hDC, то на форме все ОК
если DC = Printer.hDC, то на листе вместо блока текста, выровненного по ширине, получаем блок текста, выровненный по левому краю
...
Рейтинг: 0 / 0
11.09.2012, 14:06
    #37952599
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Вывести на форму, скопировать на принтер как картинку.
...
Рейтинг: 0 / 0
11.09.2012, 14:15
    #37952623
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
AntonariyВывести на форму, скопировать на принтер как картинку.

Я даже в голос посмеялся. Объем печати - миллионы листов. С таким костылем это будет долго )))
...
Рейтинг: 0 / 0
11.09.2012, 14:18
    #37952628
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
авторОбъявлено так:
Private Declare Function SetTextJustification& Lib "gdi32" (ByVal hDC As Long, ByVal nBreakExtra As Long, ByVal nBreakCount As Long) As Long? Сама?
...
Рейтинг: 0 / 0
11.09.2012, 14:26
    #37952638
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
ornitopterЯ даже в голос посмеялся. Объем печати - миллионы листов. С таким костылем это будет долго )))ornitopterVB6 - потому что так исторически сложилосьВ свою очередь посмеялся над выбором инструмента для решения такой задачи.


Копайте в сторону настроек dc.
...
Рейтинг: 0 / 0
11.09.2012, 14:31
    #37952652
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
AntonariyВ свою очередь посмеялся над выбором инструмента для решения такой задачи.

Копайте в сторону настроек dc.

До перехода на Win7 инструмент справлялся с задачей полностью ))

И можно по-подробней на счет настроек DC? Какие именно?
...
Рейтинг: 0 / 0
11.09.2012, 15:27
    #37952778
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
у вас случаем на x64 операционка?
есть подозрение, что причина в том, что данная ф-я находится в библиотеке gdi32.
аналогичная проблема может проявляться и в Vista.
скорее всего проблема драйвера принтера
...
Рейтинг: 0 / 0
11.09.2012, 15:36
    #37952806
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
Konst_Oneу вас случаем на x64 операционка?

Проверяли уже ) Разрядность значения не имеет. Одинаково не работает как на 32- так и на 64-битных семерках. В Висте не проверяли - по причине отсутствия таковой.
...
Рейтинг: 0 / 0
11.09.2012, 15:38
    #37952813
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
поищите в гугле, там кто-то на немецком форуме вроде отписывал по аналогичному случаю, может поможет
...
Рейтинг: 0 / 0
11.09.2012, 16:41
    #37952980
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
все чудесатее и чудесатее ))
вот так
Код: vbnet
1.
TextOut DC, currRect.left, currRect.top, OutputStringWrite, Len(OutputStringWrite)


работает

почему раньше DrawText прекрасно работал с SetTextJustification как для DC экранных форм, так и для DC принтера? загадка.
...
Рейтинг: 0 / 0
11.09.2012, 20:21
    #37953391
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
ornitopter,

SetTextJustification function

> бла-бла-бла
> ...
> Return value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.

> Remarks
> The break character is usually the space character (ASCII 32), but it may be defined by a font as some other character.
> The GetTextMetrics function can be used to retrieve a font's break character.

and so on...
...
Рейтинг: 0 / 0
13.09.2012, 18:31
    #37956633
ornitopter
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6 + win7 + SetTextJustification
скукотищаthe return value is nonzero.


всегда, как при использовании DC формы, так и при использовании DC принтера.
да и break character у шрифта Arial не отличается от пробела
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6 + win7 + SetTextJustification / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]