![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FormStyle=fsMdiChild и FormStyle=fsNormal отрисовыв. по разному?
DelphiLexx © (2006-08-24 12:53:00)Скажите, пожалуйста, почему 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/
clickmaker (2006-08-25 16:14:00) [1]
> почему FormStyle = fsMdiChild и FormStyle = fsNormal отрисовываются
> по разному?
поройся в сырцах VCL... может выяснишь, потомки тебе спасибо скажут потом )
GrayFace (2006-08-25 13:52:00) [2]Не знаю. Попробуй использовать 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)
Зачем вместо подробной ошибки выдавать свою заглушку?