Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
ВнизПроблемы с метафайлом Win95/98/2000 Найти похожие ветки
← →
Анонимщик (2002-02-22 14:59) [0]Мне нужно сформировать на листе картинку - 9 прямоугольников 3 на 3, и в каждый прямоугольник поместить свою картинку. Вот код (картинки в прямоугольники я здесь не помещаю, но дело не в этом). Этот код (уже откомпилированный, естественно) корректно работает под Win 95 и Win 98, а под 2000-ым прямоугольники рамползаются, наползают друг на друга и имеют разные размеры (это можно увидеть, посмотрев в клипборд после завершения работы процедуры). Не знаю, с чем это может быть связано, с самой виндой или драйверами видеокарты, но хотелосьбы, чтобы вне зависимости от них все работало как нужно. Что бы для этого сделать, никто не поможет?
procedure TForm1.Button1Click(Sender: TObject);
var
pMetafile: TMetafile;
coeff : Real;
i, j : Integer;
pMCanvas : TMetafileCanvas;
rect : TRect;
begin
pMetafile := TMetafile.Create;
pMetafile.MMWidth := 21000;
pMetafile.MMHeight := 29700;
pMetafile.Inch := 1440;
coeff := pMetafile.Width / pMetafile.MMWidth;
for i := 0 to 2 do
for j := 0 to 2 do
begin
pMCanvas := TMetafileCanvas.Create(pMetafile, 0);
pMCanvas.Draw(0, 0, pMetafile);
pMCanvas.Pen.Color := clBlack;
pMCanvas.Pen.Width := 3;
pMCanvas.Brush.Color := clWhite;
pMCanvas.Brush.Style := bsSolid;
rect.Left := Round(coeff * (10 + i * 600));
rect.Top := Round(coeff * (20 + j * 500));
rect.Right := Round(rect.Left + coeff * 400);
rect.Bottom := Round(rect.Top + coeff * 300);
pMCanvas.Rectangle(rect);
pMCanvas.Free();
Clipboard.Assign(pMetafile);
end;
Clipboard.Assign(pMetafile);
pMetafile.Free();
end;
← →
Анонимщик (2002-02-25 15:34) [1]Интересно (видимо, только мне), что, если в версии Win200 не указывать ширины и высоты, то все как бы нормализуется, но не до конца. Ответьте хотя бы ссылкой.
← →
CyberStorm (2002-02-26 09:01) [2]А нафига ты в цикле постоянно создаешь и удаляешь Canvas для метафайла?
Перед циклом создай канву, отрисуй в цикле все что надо, скопируй в Clipboard и затем уничтожь канву метафайла
← →
Анонимщик (2002-02-26 20:14) [3]Я модель привел, мне в эти прямоугольники рисунки заливать, но когда - неизвестно, они поодиночке строятся, ясно? И вопрос тут не о моей логике, а о том, почему не происходит так, как задумано.
← →
Анонимщик (2002-02-26 20:51) [4]Вот простой пример, который показывает, что, если рисовать так, как в борландовском хелпе написано, то получится совсем не то. Я рисую два одинаковых (по размерам) прямоугольника друг возле друга, но, когда смотрю на результат, вижу, что прямоугольники эти имеют разные, на самом, деле, размеры, и имеют сдвиг, который я не предусматривал. Вот код. И что же теперь делать? Все сразу я не могу рисовать.
TMetafile* pMetafile = new TMetafile();
pMetafile->MMWidth = 21000;
pMetafile->MMHeight = 29700;
pMetafile->Inch = 1440;
float coeffHor = (float) pMetafile->Width / (float)
pMetafile->MMWidth;
float coeffVert = (float) pMetafile->Height / (float)
pMetafile->MMHeight;
int coeff8600Hor = coeffHor * 8600;
int coeff5400Vert = coeffVert * 5400;
TRect rect;
TMetafileCanvas* pMCanvas = new TMetafileCanvas(pMetafile, 0);
pMCanvas->Draw(0, 0, pMetafile);
rect.Left = 0;
rect.Top = 0;
rect.Right = rect.Left + coeff8600Hor;
rect.Bottom = rect.Top + coeff5400Vert;
pMCanvas->Rectangle(rect);
pMCanvas->Free();
pMCanvas = new TMetafileCanvas(pMetafile, 0);
pMCanvas->Draw(0, 0, pMetafile);
rect.Left = rect.Right;
rect.Top = 0;
rect.Right = rect.Left + coeff8600Hor;
rect.Bottom = rect.Top + coeff5400Vert;
pMCanvas->Rectangle(rect);
pMCanvas->Free();
Clipboard->Assign(pMetafile);
pMetafile->Free();
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c