Autor Beitrag
Zemke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83

WIN XP
Delphi 4 Professionell
BeitragVerfasst: Mi 30.10.02 15:55 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83

WIN XP
Delphi 4 Professionell
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: 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,...

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
bis11
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1247
Erhaltene Danke: 2

Apple Mac OSX 10.11

BeitragVerfasst: Sa 23.11.02 22:58 
Und was haltet Ihr davon ?

ausblenden volle Höhe 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);