Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизPaintBox + Printer Найти похожие ветки
← →
Fast (2003-12-19 16:48) [0]Уважаемые мастера! Помогите нарисовать на PaintBox то, предварительно вывожу на Printer. Код плохой (какой есть)
procedure TForm1.Button1Click(Sender: TObject);
var W, H, H_Text, i : integer;
ss : string;
SrcDC, CompDC, B_Handle : HDC;
R : TRect;
begin
R := Rect(10,10,200,200);
ss := "AAAA DDDDDD";
W := GetDeviceCaps(Printer.Handle, HORZRES);
H := GetDeviceCaps(Printer.Handle, VERTRES);
CompDC := CreateCompatibleDC(Printer.Handle);
B_Handle := CreateCompatibleBitmap(Printer.Handle, W, H);
SelectObject(CompDC, B_Handle);
SrcDC := PaintBox1.Canvas.Handle;
DrawText(B_Handle, PChar(ss), -1, R, dt_WordBreak or dt_Left);
BitBlt(CompDC, 210, 210, 100, 100, SrcDC, 0, 0, SRCPAINT);
end;
На форме ничего на появилось. Спасибо.
← →
Тимохов (2003-12-19 17:02) [1]Вроде как вчера про paintbox говорили
В нем надо рисовать в ивенте OnPaint, а не в кликах кнопки.
Читай примеры из хелпа.
← →
Fast (2003-12-19 17:54) [2]Примеры вполне информативные и работают. Хотелось бы понять, как
на onPaint вывести образ принтера на PaintBox (с соответствующим искажением).
← →
Тимохов (2003-12-19 18:00) [3]Ты опиши вообще, что хочешь сделать.
Я так понимаю, что ты хочешь сделать preview?
Если да, то ИМХО это лучше делать метафайлами.
← →
Fast (2003-12-19 18:28) [4]Была попытка сделать preview чеерз метафайл :
Если не трудно, посмотри. Сейчас оно на onPaint не заходит. Код крайне сырой (извиняюсь), т.к. нет основной идеи.
procedure TForm1.FormCreate(Sender: TObject);
var W, H, H_Text, i : integer;
ss : string;
R : TRect;
begin
Printer := TPrinter.Create;
hp := Printer.Handle;
W := GetDeviceCaps(Printer.Handle, HORZRES);
H := GetDeviceCaps(Printer.Handle, VERTRES);
CompDC := CreateCompatibleDC(Printer.Handle);
B_Handle := CreateCompatibleBitmap(Printer.Handle, W, H);
SelectObject(CompDC, B_Handle);
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
var R : TRect;
ss : string;
MetaFile : TMetaFile;
H_Text, i : integer;
begin
with Self.Canvas, Form1 do begin
Color := clWhite;
R := Rect(0, 0, Self.Width, Self.Height);
Rectangle(R.Left-8, R.Top-8, R.Right+8, R.Bottom+8);
Font.Color := clBlue;
// создаем метафайл, используя дескриптор принтера в качестве устройства
MetaFile := TMetaFile.Create;
with TMetafileCanvas.Create(Metafile, hp) do
try
//выводим то, что предназначено для печати на канву этого метафайла,
//как на канву принтера
for i:=0 to 4{Memo1.Lines.Count - 1} do begin
ss:= PChar(Memo1.Lines.Strings[i]);
DrawText(B_Handle, PChar(ss), -1, R, dt_WordBreak or dt_Left);
H_Text := Trunc(1.5*TextHeight(ss));
R.Top := R.Top + H_Text;
end;
finally
Free;
end;
// выводим содержимое метафайла на экран
Form1.Canvas.Draw(0,0,Metafile);
end;
end;
← →
Тимохов (2003-12-19 18:36) [5]Знаешь, смотреть, чессо говоря лень.
Могу дать полностью рабочий пример этого дела. Сейчас такая штука прекрасно работает во многих местах.
Если хочешь пришлю, почту давай.
Только без распросов.
← →
Fast (2003-12-19 18:42) [6]Премного благодарен. Жду с нетерпением по V_FADEEV@list.ru
← →
Тимохов (2003-12-19 18:59) [7]отправил
← →
Ske4er (2003-12-19 19:21) [8]
> Тимохов © или Fast
После таких слов идет примерно следующее: И мнеееееееееееееее...
ЗЫ Если не сложно и мне :) хотелось бы взглянуть. to ske4er@pisem.net
← →
Тимохов (2003-12-19 19:28) [9]Отправил.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c