Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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();




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.023 c
1-43076           Kozhanov              2002-02-20 15:14  2002.03.14  
как пропачить D6 Enterprise под Windows 2000


4-43218           kirya85               2002-01-15 05:39  2002.03.14  
Какое сообщение посылается программе при завершении Windows


1-43081           Delph                 2002-02-27 13:53  2002.03.14  
Преобразование строки разных форматов в дату.


3-42967           Dad                   2002-02-09 13:58  2002.03.14  
Как отсортировать поле по убыванию


1-43018           Aaz                   2002-03-01 04:29  2002.03.14  
Добавить строки, колонки в TStringGrid