Entwickler-Ecke

Multimedia / Grafik - Hardcopy


Zemke - Mi 30.10.02 15:55
Titel: Hardcopy
Ich habe folgendes Problem:

Von meinem laufenden Programm möchte ich eine Hardcopy machen. Dies geht auch mit dem Befehl formx.print. Allerdings wird der Bildschirm hier so gedruckt, wie er angezeigt wird (ist ja auch Sinn und Zweck des Befehls). Nun möchte ich aber, daß der Hintergrund (bei mir Windows-grau) nicht gedruckt wird, sondern nur die Eingabefelder, Tabellen usw.. Ich habe mir eine Zwischenlösung ausgedacht, die mich allerdings nicht zufriedenstellt: Bevor gedruckt wird, schalte ich den Hintergrund auf weiß und danach wieder zurück auf Windows-grau. Z. B. wird der Status-Bar dann trotzdem noch grau gedruckt.

Wer kann mir helfen?

Gruß
Rainer Zemke


CenBells - Mi 30.10.02 20:17

also einfach nur den inhalt in den eingabefeldern?

benutz die funktion
printer und
printer.canvas.textout

gruß
Ken


Zemke - Sa 23.11.02 16:39
Titel: Canvas.textout
Hallo,

ich habe es mit canvas.textout probiert, es mir aber zu umständlich. Gibt es nicht irgendeinen Befehl, der den Hintergrund des aktiven Fensters entweder transparent macht oder daß der Drucker angewiesen wird, nur die Texte und Zahlen vom Formular zu drucken?

Gruß
Zemke


Wolff68 - Sa 23.11.02 16:57

Also so wie die Druck-Taste den ganzen Bildschirm ausdruckt, und Alt+Druck nur das aktive Fenster?

Lösung fällt mir aber dazu auch grad nicht ein... :oops:

Vielleicht kann man ja Windows ein Alt+Druck senden?
Danach wäre der Bildschirminhalt im Zwischenspeicher,...


bis11 - Sa 23.11.02 22:58

Und was haltet Ihr davon ?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
procedure ScreenShot(Bild: TBitMap);
var
  c : TCanvas;
  r : TRect;
begin
  c:= TCanvas.Create;
  c.Handle := GetWindowDC (GetDesktopWindow);
  try
    r := Rect(0,0,screen.width,screen.height);
    Bild.Width := screen.Width;
    Bild.Height := screen.Height;
    Bild.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0,c.handle);
    c.Free;
  end;
end;

procedure ScreenShotActiveWindow(Bild: TBitMap);
var
  c : TCanvas;
  r, t : TRect;
  h : THandle;
begin
  c := TCanvas.Create;
  c.Handle := GetWindowDC(GetDesktopWindow);
  h := GetForeGroundWindow;
  if h<>0 then
    GetWindowRect(h, t);
  try
    r := Rect(0,0,t.Right-t.left, t.Bottom-t.Top);
    Bild.Width := t.Right-t.left;
    Bild.Height := t.Bottom-t.Top;
    Bild.Canvas.CopyRect(r, c, t);
  finally
    ReleaseDC(0, c.handle);
    c.Free;
  end;
end;


Aufgerufen wird folgendermaßen :

ScreenShot(Image1.Picture.BitMap);

ScreenShotActiveWindow(Image1.Picture.BitMap);