home *** CD-ROM | disk | FTP | other *** search
- {
- From: peter.gruhn@delta.com (Peter Gruhn)
-
- Ka> I've had little luck in finding out how to do more general drawing in
- Ka> an offscreen bitmap (say, with a compatible bitmap created from an
- Ka> HWindow's DC).
-
- I'm assuming you have a DC already off screen that you can blit from?
- You can draw to it too. Just like a normal DC. I'm worrying now that I
- don't quite understand either your problem or just what your code looks
- like.
-
- Ka> Many thanks for your help.
-
- Hey, it's late, I'll see what I can write...there didn't take long. I
- was able to draw rectangles off screen and blit them to the main window.
- You ought to be able to do whatever drawing function you want. I took
- some short cuts regarding colour depth and bitmap size (hard coding
- rules OK!)
-
- by Peter Gruhn
- it's small and useless and stupid and somebody
- might find it useful, so I release this program
- into the public domain for the good of all
- sentient species the universe over. 7-8-1994
- }
-
- program offscree;
-
- {you have tpw not bp? your uses will be a little different}
- uses owindows,winprocs,wintypes;
-
- type
- TMyApp=object(tapplication)
- procedure initmainwindow; virtual;
- end;
-
- PMyWin=^TMyWin;
- TMyWin=object(TWindow)
- procedure Paint(PaintDC: HDC; var PaintInfo: TPaintStruct); virtual;
- end;
-
- procedure TMyApp.initmainwindow;
- begin
- mainwindow:=new(pmywin,init(nil,'Try this...'));
- end;
-
- procedure TMyWin.Paint;
- var adc:hdc;
- abmp:hbitmap;
- i:integer;
- s:string;
- begin
- {Create stuff}
- adc:=createcompatibledc(paintdc);
- {I believe that I am cheating here, by just divving number of bits
- by 2 as I happen to know that right now I am in 16 colour mode.
- You will forgive me.}
- abmp:=createcompatiblebitmap(paintdc,300 div 2,300 div 2);
- abmp:=selectobject(adc,abmp);
-
- {Blank off screen bitmap of random data}
- bitblt(adc,0,0,300,300,adc,0,0,whiteness);
-
- {Draw something}
- for i:=0 to 1024 do
- begin
- rectangle(adc,random(300),random(300),random(300),random(300));
- str(i:5,s); {textify i for...}
- s[6]:=#0; {null terminator}
- textout(paintdc,10,10,@(s[1]),byte(s[0])); {just to count so it don't look
- plain}
- end;
-
- {blit it to the window}
- bitblt(paintdc,10,10,300,300,adc,0,0,srccopy);
-
- {Kill stuff}
- deleteobject(selectobject(adc,abmp));
- deletedc(adc);
- end;
-
- var app:TMyApp;
-
- begin
- app.init('frog');
- app.run;
- app.done;
- end.