Einzelnen Beitrag anzeigen

Helmi47

Registriert seit: 31. Jan 2013
6 Beiträge
 
#8

AW: Probleme mit einem Formular

  Alt 1. Feb 2013, 08:35
Delphi-Quellcode:
unit anzeige;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,unit1, StdCtrls, Buttons, ExtCtrls,printers;

type
  TForm2 = class(TForm)
    Shape1: TShape;
 
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  
  blatt:tcanvas;
  dc : hdc;
  druckbreite,druckhoehe:integer;
  panelx:twincontrol;
  mmpropixely,mmpropixelx:single;
  

implementation
 
{$R *.dfm}

procedure blattanpassen;
var
  prnxy,formxy:single;
  dx,dy,x,y : integer;
  blattbreite,blatthoehe : integer;
  scale : single;
  xofs,yofs : single;

begin
mmpropixelx :=25.4/getdevicecaps(printer.handle,logpixelsx);
mmpropixely :=25.4/getdevicecaps(printer.handle,logpixelsy);
blattbreite:=round (getdevicecaps(printer.Handle,physicalwidth)*mmpropixelx);
blatthoehe:=round (getdevicecaps(printer.Handle,physicalheight)*mmpropixely);
xofs:=round(getdevicecaps(printer.Handle,physicaloffsetx)*mmpropixelx);
yofs:=round(getdevicecaps(printer.Handle,physicaloffsety)*mmpropixely);
druckbreite:= getdevicecaps(printer.Handle,horzsize);
druckhoehe:= getdevicecaps(printer.Handle,vertsize);
y:=35;
x:=10;
formxy:=( form2.ClientWidth -x) / (form2.ClientHeight -y);
prnxy := blattbreite / blatthoehe;

if formxy < prnxy then begin
           dx:=form2.ClientWidth-20;
           dy:=round(dx/prnxy);
           y:=round((form2.ClientHeight /2+8) - (dy/2));
  end else begin
           dy:=form2.ClientHeight -y - 10;
           dx:=round(dy * prnxy);
           x:=round((form2.ClientWidth / 2) - (dx /2));
           end;

form2.shape1.setbounds(x,y,dx,dy);
scale:=dy/blatthoehe;
panelx.SetBounds(x+round(xofs*scale),y+round(yofs*scale),
                 round(druckbreite*scale),round(druckhoehe*scale));

setmapmode(blatt.Handle,mm_anisotropic);
setviewportextex(blatt.Handle,dx,dy,nil);
setwindowextex(blatt.Handle,druckbreite*10,-druckhoehe*10,nil);
setbkmode(blatt.Handle,transparent);
blatt.Brush.Style:=bssolid;
blatt.Brush.Color:=clwhite;
blatt.Pen.Color:=clblack;
blatt.FillRect(bounds(0,0,druckbreite*10,-druckhoehe*10));
end; {of blattanpassen}


procedure ausgabe(ziel:tcanvas);
var
i,l,breite,hoehe:integer;
s,t:string;
 
with ziel do begin
font.Height:=50;
font.Name:='Arial';
settextalign(handle,ta_left+ta_top);
breite:=druckbreite*10;
hoehe:=druckhoehe*10;
textout(1150,(i*-53)-120,'Festplatte: '+s);
                    end;


end; {end of ausgabe}





procedure TForm2.BitBtn2Click(Sender: TObject);
begin
if seite=anz_seiten then exit;
if seite<anz_seiten then seite:=seite+1;
blattanpassen;
ausgabe(blatt);
end;

procedure TForm2.BitBtn3Click(Sender: TObject);
begin
if seite=1 then exit;
if seite>1 then seite:=seite-1;
blattanpassen;
ausgabe(blatt);
end;


procedure TForm2.FormResize(Sender: TObject);
begin
blattanpassen;
ausgabe(blatt);
end;

procedure TForm2.FormShow(Sender: TObject);
var


begin

{diese 5 zeilen standen mal in form2.create}
panelx:=twincontrol.Create(self);
panelx.Parent:=form2;
blatt:=tcanvas.Create;
blatt.Handle:=getdc(panelx.Handle);
setmapmode(blatt.Handle,mm_anisotropic);



blattanpassen;
ausgabe(blatt);
end;

end.
  Mit Zitat antworten Zitat