powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TeeChart вывод в метафайл
16 сообщений из 16, страница 1 из 1
TeeChart вывод в метафайл
    #39634734
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Использую собственный код для отрисовки текста осей (axis titles). Для отрисовки использую Canvas.ReferenceCanvas. На экране все OK, отображается так как надо.
При попытке вывести в метафайл с помощью TMetafileCanvas и метода DrawToMetaCanvas, текст отображается некорректно, в неправильной позиции (со смещением, как-будто используется другая метрика Device Context). То же самое происходит при SaveToMetafileEnh(). Сам текст рисуется вроде корректно (размер, ориентация).

Знаю про свойство TTeeCanvas.Metafiling, но примеров применения что-то не нашел.
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634750
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,

спасибо, интересно. :)
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634791
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чччДBelotsky Serge,

спасибо, интересно. :)

???
А, понял! Тебе нужно, чтобы я сформулировал вопрос?

так вот вопрос: как побороть эту проблему!
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634818
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,
Скорее всего, проблема в самом чарте.
Что возращает GetWindowOrg() в обоих случаях?
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634834
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский БорисBelotsky Serge,
Скорее всего, проблема в самом чарте.
Что возращает GetWindowOrg() в обоих случаях?

В обоих случаях, возвращается (0,0)
Может неправильно проверяю?

Код: pascal
1.
2.
3.
        TitleCanvas := chrtParams[ChartIdx].Canvas.ReferenceCanvas;
        if chrtParams[ChartIdx].Canvas.Metafiling then
         GetWindowOrgEx(TitleCanvas.Handle, P);
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634886
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belotsky Serge,

В принципе, текст отображается нормально, если отказаться от Chart1.Canvas.ReferenceCanvas и использовать Chart1.Canvas.
Но! не могу повернуть текст (по вертикали):(
Следующая конструкция не работает:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        with Chart1, Canvas do
         begin
           Font.Name := LeftAxis.Title.Font.Name;
           Font.Size := LeftAxis.Title.Font.Size;
           Font.Style := LeftAxis.Title.Font.Style;

           GetObject(Font.Handle, SizeOf(LogFont), Addr(LogFont));
           LogFont.lfEscapement := 900; // вертикально вверх
           Font.Handle := CreateFontIndirect(LogFont);

           TextOut(L, T, S); // рисует горизонтальный текст
         end;

...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634932
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,

А сам шрифт допускает поворот?
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634952
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterBelotsky Serge,

А сам шрифт допускает поворот?
Следующий код работает (за исключением смещения, смещение - неправильное) :
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 
    TitleCanvas := chrtParams[ChartIdx].Canvas.ReferenceCanvas;
     with TitleCanvas do // Chart1, Canvas
         begin
           Font.Name := LeftAxis.Title.Font.Name;
           Font.Size := LeftAxis.Title.Font.Size;
           Font.Style := LeftAxis.Title.Font.Style;

           GetObject(Font.Handle, SizeOf(LogFont), Addr(LogFont));
           LogFont.lfEscapement := 900; // вертикально вверх
           Font.Handle := CreateFontIndirect(LogFont);

           TextOut(L, T, S); // рисует горизонтальный текст
         end;

...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634958
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,

Код: pascal
1.
LogFont.lfOrientation :=900; 


добавить пробовал?
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634973
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMasterBelotsky Serge,

Код: pascal
1.
LogFont.lfOrientation :=900; 


добавить пробовал?
это не действует тоже.
Зато работает код ниже:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 with Chart1, Canvas do
         begin
           Font.Name := LeftAxis.Title.Font.Name;
           Font.Size := LeftAxis.Title.Font.Size;
           Font.Style := LeftAxis.Title.Font.Style;

//           GetObject(Font.Handle, SizeOf(LogFont), Addr(LogFont));
//           LogFont.lfEscapement := 900; // вертикально вверх
//           Font.Handle := CreateFontIndirect(LogFont);
//           TextOut(L, T, S); // рисует горизонтальный текст

           RotDegree := 90.0;
           RotateLabel(L, T, S, RotDegree); // вывод вертикального текста
         end;



Всем спасибо за участие, вопрос решен!
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634983
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belotsky Serge,

PS: Замечание к предыдущему посту.
По какой-то непонятной мне причине, TTeeCanvas.FillRect(R) именно для цвета Chart1.Color - не работает! Для любого другого цвета - работает, кроме Chart1.Color.
Поэтому для этого случая, необходимо использовать следующий код через ReferenceCanvas:
Код: pascal
1.
2.
3.
4.
5.
6.
          with ReferenceCanvas do  // очищаем зону вывода Title
           begin
            Brush.Color := chrtParams[ChartIdx].Color;
            Brush.Style := bsSolid;
            FillRect(R);
           end;


Что интересно, вывод примитивов (FillRect) в заданной позиции, почему-то не "страдает" болезнью смещения, только вывод текста TextOut.
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634985
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky Serge,
Canvas.TextFlags что стоит?
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39634986
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соколинский БорисBelotsky Serge,
Canvas.TextFlags что стоит?

В обоих случаях 0. TTeeCanvas не имеет TextFlags. Только ReferenceCanvas;
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39635169
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belotsky SergeBelotsky Serge,

PS: Замечание к предыдущему посту.
По какой-то непонятной мне причине, TTeeCanvas.FillRect(R) именно для цвета Chart1.Color - не работает! Для любого другого цвета - работает, кроме Chart1.Color.

PPS: Вывести текст цветом clWindowsText в TCanvas3D тоже не получается. Черным, красным, зеленым - пожалуйста, а clWindowsText не отображается. Это из той же оперы, что закрасить FillRect цветом clBtnFace.

В чем дело, не пойму, может кто знает?
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39635280
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belotsky SergeBelotsky SergeBelotsky Serge,

PS: Замечание к предыдущему посту.
По какой-то непонятной мне причине, TTeeCanvas.FillRect(R) именно для цвета Chart1.Color - не работает! Для любого другого цвета - работает, кроме Chart1.Color.

PPS: Вывести текст цветом clWindowsText в TCanvas3D тоже не получается. Черным, красным, зеленым - пожалуйста, а clWindowsText не отображается. Это из той же оперы, что закрасить FillRect цветом clBtnFace.

В чем дело, не пойму, может кто знает?

Попробуйте перевести цвет в RGB и добавить A канал.
...
Рейтинг: 0 / 0
TeeChart вывод в метафайл
    #39635352
Belotsky Serge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asviridenkovBelotsky Sergeпропущено...

PPS: Вывести текст цветом clWindowsText в TCanvas3D тоже не получается. Черным, красным, зеленым - пожалуйста, а clWindowsText не отображается. Это из той же оперы, что закрасить FillRect цветом clBtnFace.

В чем дело, не пойму, может кто знает?

Попробуйте перевести цвет в RGB и добавить A канал.
Он реагирует на альфа канал, т.е если записать: Font.Color := clWindowText and $80FFFFFF цвет будет полупрозрачным. Понятно, что у clWindowsText альфа канал = $FF (прозрачный). Но почему обычный ReferenceCanvas.TextOut не реагирует на А канал, и как TCanvas3D.TextOut - реагирует? Какое свойство отвечает за это?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TeeChart вывод в метафайл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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