Текущий архив: 2006.10.08;
Скачать: CL | DM;
ВнизFormStyle=fsMdiChild и FormStyle=fsNormal отрисовыв. по разному? Найти похожие ветки
← →
DelphiLexx © (2006-08-24 12:53) [0]Скажите, пожалуйста, почему FormStyle = fsMdiChild и FormStyle = fsNormal отрисовываются по разному? И как заставить систему отрисовку FormStyle = fsMdiChild вести так же как и FormStyle = fsNormal.
Вот пример разной отрисовки для этих стилей.
Данный код позволяет скопировать в metafile внешний вид панельки на которой размещен рисунок и которая заходит за грань формы (т.е. не видна). Этот код работает для FormStyle = fsNormal, но не работает для MDI-приложения. Помогите реализовать работу этого кода и для MDI - приложений.
procedure TMainForm.Button1Click(Sender: TObject);
{Создает панельку с картинкой, которую мы затем хотим сохранить в MetaFile}
var
img: TImage;
pnl: TPanel;
begin
pnl := TPanel.Create(form1);
with pnl do
begin
Parent := form1;
ParentColor := true;
Top := 100;
Left := form1.Width + 100;
img := TImage.Create(pnl);
with img do
begin
Parent := pnl;
Stretch := false;
AutoSize := false;
Align := alNone;
Picture.Metafile.LoadFromFile("D:\1\MyPicture.wmf");
AutoSize := true;
pnl.Width := img.Width;
pnl.Height := img.Height;
img.Align := alClient;
img.Stretch := true;
end;
end;
end;
procedure
TMainForm.SaveAsMetaFileClick(Sender: TObject);
{Непосредственно сохраняет панельку в MetaFile}
var
i: integer;
pt: TPoint;
mf: TMetaFile;
mfCanvas: TMetaFileCanvas;
begin
if SaveDialog1.Execute then
begin
mf := TMetaFile.Create;
try
mf.Enhanced := true;
mf.Width := form1.Width + 160;
mf.Height := form1.ClientHeight;
mfCanvas := TMetaFileCanvas.Create(mf, 0);
try
for i := 0 to form1.ControlCount - 1 do
if Form1.Controls[i] is TPanel then
begin
pt.X := form1.HorzScrollBar.Position + form1.Controls[i].Left;
pt.Y := form1.VertScrollBar.Position + form1.Controls[i].Top;
TPanel(form1.Controls[i]).PaintTo(mfCanvas.handle, pt.X, pt.Y);
end;
finally
mfCanvas.Free;
end;
try
mf.SaveToFile(SaveDialog1.FileName);
except
MessageBox(self.Handle, "Файл не удалось сохранить.", "Ошибка", MB_ICONERROR or MB_OK)
end;
finally
mf.Free;
end;
end;
end;
procedure
TMainForm.Button2Click(Sender: TObject);
begin
{создаем форму на панели}
Form1 := TForm.Create(panel1);
with Form1 do
begin
Name := "form1";
Color := clWhite;
Parent := Panel1;
BorderStyle := bsNone;
Align := alClient;
AutoScroll := true;
DoubleBuffered := true;
Show;
end;
Button1Click(nil);
end;
Проект полностью:
http://up.spbland.ru/files/06082431/
← →
GrayFace © (2006-08-25 13:52) [1]Не знаю. Попробуй использовать fsNormal.
DelphiLexx © (24.08.06 12:53)
if Form1.Controls[i] is TPanel then
А причем тут TPanel?
DelphiLexx © (24.08.06 12:53)
MessageBox(self.Handle, "Файл не удалось сохранить.", "Ошибка", MB_ICONERROR or MB_OK)
Зачем вместо подробной ошибки выдавать свою заглушку?
← →
clickmaker © (2006-08-25 16:14) [2]
> почему FormStyle = fsMdiChild и FormStyle = fsNormal отрисовываются
> по разному?
поройся в сырцах VCL... может выяснишь, потомки тебе спасибо скажут потом )
Страницы: 1 вся ветка
Текущий архив: 2006.10.08;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.037 c