Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-43091
Demon ltd
2002-02-27 23:42
2002.03.14
Повторная помощь с созданием инстольника


4-43231
raiks
2002-01-13 16:29
2002.03.14
Как отследить попытку обращения к файлу?


14-43171
Moscower
2002-01-28 23:00
2002.03.14
Есть ли в Москве какие-либо анонимные прокси-сервера?


1-42996
AndrewK
2002-02-28 13:46
2002.03.14
QuickReport


4-43221
dr.Flex
2002-01-15 22:23
2002.03.14
Беркли сокеты в Винде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский