проблемы печати TChart
От: woland255  
Дата: 30.08.05 10:48
Оценка:
Доброго времени суток.
Я тут уже ранее задавал вопросы про печать графика, который в TChart сделан. Дело тогда свелось к попытке его распечатать через quick report и я интересовался, как получить от принтера размер бумаги в мм. После многочисленных проб, набролось некторое количество разных вопросов и странностей, о которых хотелось бы спросить корефеев или тех, кто сталкивался с подобным. Итак:
1). по поводу quick report. Мне советовали обратить внимание на функции API GetDeviceCaps и DeviceCapabilities. Я попробовал. Обе функции не выдают результата. DeviceCapabilities либо сваливается по эксепшену в winspool.drv, либо возвращает (-1), то бишь облом. Код такой к примеру (C++ Builder):
 char *dev;
 char *prt;
 int a=DeviceCapabilities (dev,prt,DC_PAPERS,NULL,NULL);
 ShowMessage(a);

Мне советовали через GetDeviceCaps c помощью
float ppcmy=GetDeviceCaps(Printer()->Handle,LOGPIXELSY)/2.54;
float ppcmx=GetDeviceCaps(Printer()->Handle,LOGPIXELSX)/2.54;
ShowMessage (Printer()->PageWidth/ppcmy);
ShowMessage (Printer()->PageHeight/ppcmx);

код срабатывает, но результат не похож на А4. Более того, если сменить ориентацию на альбомную, размер бумаги не совпадает с книжной ориентацией...
Вот в чем тут могет быть дело??? Подозреваю, что то, что дальше — другая сторона того же глюка.
2). Сделал по другому. Остановился на варианте c PrintPartialCanvas на полученый канвас принтера. Здесь работает хоть иногда. Но при выборе принтера (PriterSetupDialog или PrintDialog)нормально выбираются только некоторые принтеры. При выборе некоторых (в сети) происходит ужасный эксепшн. Сначала программа высыпается в asm'овский отладчик билдера, после пинка F9 выдает еще 0х00000008 экспешн уже в рантайме. И так 2 раза. после чего выбранный принтер нормально отпечатывает график, который его просили..... Методом тыка было выяснено, что вылет в отладчик вызывает именно окно диалога выбора принтера, а 8-ой эксепшн — Printer->EndDoc(). Уточнение с предположением. Большинство компов — старые, там виды 98. Принтеры везде весят расшареные в сеть на них. Мой комп более менее приличный с XP SP1 на борту. Но все приложения печатают через них нормально..... Но мож дело в этом?
Еще в эту же корзину. Если принтер по умолчанию не доступен, диалог выбора принтера не вызывается вовсе.... Но блин, а это-то почему??? А сменить как???
Опять же туда же... Я уже ранее говорил в предыдущем посте, что вызов Printer()->GetPrinter приводит к тому, что вместо имени принтера возвращается сетевой путь до него! И еще. В qucik reporte есть свойство QRPrinter. При попытке обратиться к любому свойству этого объекта все вылетает по эксепшену.
Вобщем-то проблема, описаная в этом пункте — главная. Подскажите, пожалуйста, что можно сделать!!!!!

Далее вопросы другого характера.

3). Как бы реализовать монохромную печать? То есть графики с цветами, а на черно-белой лазерке выходит плохо.... Соответсвующее свойство выдает нечто ужасное на экране и не влияет на принтер почему-то никак......
4). На некоторых принтерах не пропечатывается сетка. А нужна. Хотел увеличить толщину линий, и, с удивлением для себя, обнаружил, что всякие dash'овские стили пера не поддерживаются для толщины, большей 1.... Что посоветуете?
5). Если отключить видимость легенды, то подпись по оси X самой правой точки графика обрезается на канвасе TChart'а. Как такого избежать?
Re: проблемы печати TChart
От: woland255  
Дата: 31.08.05 18:27
Оценка:
И не одного ответа ((
Re: проблемы печати TChart
От: Аноним  
Дата: 12.09.05 09:57
Оценка:
Здравствуйте, woland255, Вы писали:

На всё не отвечу, расскажу как делаю сам. Пользую FastReport. Там есть компонент для печати графиков, исходники доступны. Весь смысл в создание EMF/WMF образа с поcледующей отрисовкой на канве принтера. То есть не сложнее вставить картинку в этот самый отчет. Функция Tchart для создания WMF -> TeeCreateMetafile.

Насчёт монохромности. Это беда. В самом TChart есть свойство для этих целей но лучше не пользовать. Руками в рантайме сохраняю все цвета, от легенд, серий и тд перевожу в b/w, после забора рисунка для печати восстанавливаю исходные.
Re[2]: проблемы печати TChart
От: Danchik Украина  
Дата: 12.09.05 16:13
Оценка: 6 (1)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, woland255, Вы писали:


А>На всё не отвечу, расскажу как делаю сам. Пользую FastReport. Там есть компонент для печати графиков, исходники доступны. Весь смысл в создание EMF/WMF образа с поcледующей отрисовкой на канве принтера. То есть не сложнее вставить картинку в этот самый отчет. Функция Tchart для создания WMF -> TeeCreateMetafile.


А>Насчёт монохромности. Это беда. В самом TChart есть свойство для этих целей но лучше не пользовать. Руками в рантайме сохраняю все цвета, от легенд, серий и тд перевожу в b/w, после забора рисунка для печати восстанавливаю исходные.


Да, кстати, как сделать цвет чернобелым (Photoshop algorithm, уйму времени убил пока нашел...):
function Clamp (X: Double): Byte;
begin
  if X < 0 then
    Result := 0
  else
    if X + 0.1 >= 255 then
      Result := 255
  else
    Result := Trunc (X);
end;

function GrayScaleColor(Color: TColor): TColor;
const
  cntGamma = 2.243;
var
  aRGB       : Integer;
  aRGBQuad   : TRGBQuad absolute aRGB;
  aValue     : Extended;
  aComponent : Byte;
begin
  aRGB := ColorToRGB(Color);

  with aRGBQuad do
    aValue :=
      0.213  * Power (rgbRed, cntGamma) +
      0.715  * Power (rgbGreen, cntGamma) +
      0.0724 * Power (rgbBlue, cntGamma);

  aValue := Power (aValue, 1 / cntGamma);

  aComponent := Clamp (aValue);

  Result := RGB (aComponent, aComponent, aComponent);
end;
Re[3]: проблемы печати TChart
От: woland255  
Дата: 12.09.05 19:38
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, woland255, Вы писали:


D>Да, кстати, как сделать цвет чернобелым (Photoshop algorithm, уйму времени убил пока нашел...):


А вот за это отдельное и огромное спасибо!
Re: проблемы печати TChart
От: Shtirliz Россия  
Дата: 13.09.05 06:13
Оценка:
Здравствуйте, woland255, Вы писали:

Я печатал в Delphi с помощью функции ChartPreview из модуля TeePrevi.
Не знаю правда как в билдере. Думаю там тоже есть такое.
Правда в Delphi он тока в виде DCU.

Может поможет...

Удачи.
Дункан Маклауд любил ходить в лес и издеваться над кукушками.
138385660
Re[3]: проблемы печати TChart
От: _avp_  
Дата: 13.09.05 06:18
Оценка:
Здравствуйте, Danchik, Вы писали:

А>>Насчёт монохромности. Это беда. В самом TChart есть свойство для этих целей но лучше не пользовать. Руками в рантайме сохраняю все цвета, от легенд, серий и тд перевожу в b/w, после забора рисунка для печати восстанавливаю исходные.


D>Да, кстати, как сделать цвет чернобелым (Photoshop algorithm, уйму времени убил пока нашел...):


Если честно, когда на графике штук 20 серий это мало помогает. Из ситуации выходил таким образом: варьировал тип и толщины пера.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.