// Getestet mit D4 unter Win98 procedure TMainform.farbe(sender: tobject);
var
cnv: Tcanvas;
begin
cnv := tcanvas.create;
try
cnv.handle := getdc(mainform.clienthandle);
cnv.brush.color := hintergrundfarbe;
cnv.pen.style := psclear;
cnv.rectangle(0, 0, mainform.clientwidth, mainform.clientheight);
mainform.color := hintergrundfarbe;
finally
releasedc(mainform.clienthandle, cnv.handle);
cnv.free;
end;
end;
implementation {$R *.DFM} uses ChildWin, About; procedure TMainForm.FormCreate(Sender: TObject);
begin
bm := TBitmap.create;
bm.loadfromfile('c:\dbr\i0.bmp');
mainform.brush.bitmap := bm;
bm.dormant;
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
bm.free;
end;
//
---------------------------------------------------------------------------- procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
if OpenDialog.Execute then
CreateMDIChild(OpenDialog.FileName);
end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
bmp := TBitmap.create;
bmp.loadfromfile('d:\dbr\frau.bmp');
mainform.Brush.bitmap := bmp;
end;
procedure TMainForm.wechsel(bild: TFileName);
var
hb: HBrush;
dc: hdc;
begin
dc := getdc(mainform.clienthandle);
mainform.Brush.bitmap := nil;
bmp.loadfromfile(bild);
mainform.Brush.bitmap := bmp;
hb := createpatternbrush(bmp.handle);
selectobject(dc, hb);
patblt(dc, 0, 0, clientwidth, clientheight, patcopy);
deleteobject(hb);
releasedc(mainform.clienthandle, dc);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
bmp.free;
end;
// In der Unit Childwin kann das beispielsweise so aufgerufen werden:
procedure TMDIChild.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
mainform.wechsel('d:\dbr\exo.bmp');
end;
//
---------------------------------------------------------------------------- procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
if OpenDialog.Execute then
CreateMDIChild(OpenDialog.FileName);
end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.darstellen;
var
hb: HBrush;
rec: TRect;
dc: hdc;
cnv: TCanvas;
procedure zeichnen(c: TCanvas);
var links, oben, rechts, unten: integer;
begin
links := (clientwidth - bmp.width) div 2;
oben := (clientheight - bmp.height - abzug) div 2;
rechts := links + bmp.width;
unten := oben + bmp.height;
c.brush.color := clAppWorkSpace;
if links > 0 then begin
c.fillrect(rect(0, 0, links, clientheight));
c.fillrect(rect(rechts, 0, clientwidth, clientheight));
end;
if oben > 0 then begin
c.fillrect(rect(links, 0, rechts, oben));
c.fillrect(rect(links, unten, rechts, clientheight));
end;
c.draw(links, oben, bmp);
end;
begin
Brush.bitmap.free;
if not ende then begin
dc := getdc(clienthandle);
cnv := TCanvas.create;
cnv.handle := dc;
Brush.bitmap := TBitmap.create;
case anzeige of
kacheln:
begin
Brush.bitmap.assign(bmp);
hb := createpatternbrush(bmp.handle);
selectobject(dc, hb);
patblt(dc, 0, 0, clientwidth, clientheight, patcopy);
deleteobject(hb);
end;
dehnen:
begin
Brush.bitmap.width := clientwidth;
Brush.bitmap.height := clientheight - abzug;
rec := clientrect;
rec.bottom := rec.bottom - abzug;
Brush.bitmap.canvas.stretchdraw(rec, bmp);
cnv.stretchdraw(rec, bmp);
end;
zentrieren:
begin
Brush.bitmap.width := clientwidth;
Brush.bitmap.height := clientheight - abzug;
zeichnen(Brush.bitmap.canvas);
zeichnen(cnv);
end;
end;
cnv.free;
releasedc(clienthandle, dc);
end;
end;
procedure TMainForm.wechseln(bild: TFileName);
begin
bmp.loadfromfile(bild);
darstellen;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
abzug := ToolBar2.height + statusbar.height; // bei Bedarf
bmp := TBitmap.create;
wechseln('d:\dbr\frau.bmp');
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
bmp.free;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
ende := canclose;
end;
procedure TMainForm.FormResize(Sender: TObject);
begin
darstellen;
end;
// ----- Beispielaufrufe von einem Child aus ------------
// Beim Klick auf ein Memo wird die Anzeigeart umgeschaltet
procedure TMDIChild.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
case anzeige of
dehnen: anzeige := zentrieren;
kacheln: anzeige := dehnen;
else anzeige := kacheln;
end;
mainform.formresize(sender); // nicht etwa "darstellung" aufrufen
end;
// Wenn ein zweites Child geöffnet wird, wechselt das Hintergrundbild
procedure TMDIChild.FormDeactivate(Sender: TObject);
begin
mainform.wechseln('d:\dbr\exo.bmp');
end;
|





