Avatar billede jhald Nybegynder
24. juli 2002 - 14:33 Der er 15 kommentarer og
1 løsning

Print ud fra grid

Hvordan printer man lettest ud fra et normalt stringgrid?

Faktisk bruger jeg et custom grid der hedder 'StringAlignGrid' - men det arver alle egenskaber fra den normale StringGrid..
Avatar billede martinlind Nybegynder
24. juli 2002 - 14:43 #1
Man løber Cellerne igenem og skriver det til printeren
Avatar billede martinlind Nybegynder
24. juli 2002 - 14:45 #2
Du kan også hente dette http://reportman.sourceforge.net
og bruge det til at lave din report
Avatar billede jhald Nybegynder
30. juli 2002 - 10:53 #3
Vi bruger et grid til at tegne en slags kort - så vidt vi kan se er der ikke mulighed for at få det hele skrevet ud på en side - så det kommer til at ligne et oversigtskort? Kan ikke umiddelbart finde ud af hvordan man får det til det.

Sidder også og roder med at gemme det som html og så skrive html-siden ud - men det giver nogle prob's med at det bliver skrevet ud i for småt format
Avatar billede martinlind Nybegynder
30. juli 2002 - 13:31 #4
Du laver en MetaFile i den størelse du skal bruge, så "tegner" du din grid på den, der efter sætter du metafilens størelse til din parpir størelse, og vupti så er det "fit to page"

/Martin
Avatar billede martinlind Nybegynder
30. juli 2002 - 13:31 #5
du kan kigge på TMetaFileCanvas classen
Avatar billede jhald Nybegynder
30. juli 2002 - 13:44 #6
okay, det lyder fornuftigt. men hvordan sender jeg en Metafil til printeren. At smide griddet over i en alm Metafil er ikke svært der sender jeg den bare over som en Stream men hvad jeg så gør derfra er jeg ikke helt sikker på ? men derudover MetaFileCanvas kan jeg ikke helt se hvad jeg skal bruge til, den bruger jo kun shapes og den kan jeg da ikke overfører direkte til..kan jeg ?
Avatar billede martinlind Nybegynder
30. juli 2002 - 13:48 #7
så laver du bare en Printer.Canvas.Draw() eller Bitblt()
Avatar billede martinlind Nybegynder
30. juli 2002 - 13:49 #8
en MetaFileCanvas funker lige som en alm Canvas, du kan skrive / tegne på den
Avatar billede jhald Nybegynder
30. juli 2002 - 13:56 #9
okay det vil sige at det vil være sådan noget som dette her.

  Metating.LoadFromStream(Tempstream);
  Mcanvas.Create(Metating, HDC(0)); <-- det kræver en HDC med  parameter med ? nogen anelse hvad det er ?
 
  Så sætter jeg en canvas width/height så det passer og så smider jeg lortet til en printer vha

printer.canvas.draw

sorry men jeg er lidt fatsvag lige nu :-)
Avatar billede martinlind Nybegynder
30. juli 2002 - 14:03 #10
fra Online Hjælpen :

This example shows how to create or augment a metafile using a metafile canvas object.  This metafile can then be used to draw on the canvas of another object such as a paintbox or a printer.

MyMetafile := TMetafile.Create;

with TMetafileCanvas.Create(MyMetafile, 0) do
try
  Brush.Color := clRed;
  Ellipse(0,0,100,100);
  ...
finally
  Free;

end;

Form1.Canvas.Draw(0,0,MyMetafile); {1 red circle }

To add to an existing metafile image, create a metafile canvas and play the source metafile into the metafile canvas:

with TMetafileCanvas.Create(MyMetafile, 0) do

try
  Draw(0,0,MyMetafile);
  Brush.Color := clBlue;
  Ellipse(100,100,200,200);
...
finally
  Free;
end;

Form1.Canvas.Draw(0,0,MyMetafile); {1 red circle and 1 blue circle }


Du kan også bruge Printer's HDC som metafile ref.

/Martin
Avatar billede jhald Nybegynder
30. juli 2002 - 14:07 #11
thx.. jeg kigger lige lidt mere på det i aften og så håber jeg at jeg har forstået det :-) men tak for hjælpen indtil videre, jeg giver point senere :-)
Avatar billede martinlind Nybegynder
30. juli 2002 - 14:09 #12
OK, du spørger bare
Avatar billede beorn Nybegynder
31. juli 2002 - 11:26 #13
K := 1;
  L := 1;
  Metating := Tmetafile.Create;
  with TMetafileCanvas.Create(MetaTing, 0) do
    try
      Brush.Color := clwhite;
      for I:=0 to sg1.Width do
        begin
          for J :=0 to sg1.Height do
            begin
              if sg1.ColorCell[i,j] = clwhite then
                begin
                  showmessage('HVID!!!');
                  Brush.Color := clwhite;
                  Rectangle(k,l,k+1,l+1);
                  inc(k);
                  inc(l);
                end
              else
              begin
                Brush.Color := CLyellow;
                Rectangle(k,l,k+1,l+1);
                inc(k);
                inc(l);
              end;
            end;
        end;
    finally
    Free;
      showmessage('færdig!!!');
  end;
  with Printer do
    begin
      BeginDoc;
      Canvas.Draw(0,0,Metating);
      EndDoc;
  end;
end;

Hejsa. jeg har lidt overtaget problem stillingen da vi laver projektet sammen og nu har jeg da endelig fået det til at  virke sådan nogenlunde da. men lortet er nu at den ikke vil bruge min løkke .dvs at den hopper direkte til ELSE hvergang jeg kører lykken. derudover er jeg også i tvivl om hvilke størrelse mine firkanter får, de skal ikke være særligt store. og grunden til at jeg har to forskellige farver er at jeg skal tegne to forskellige typer ind på kortet (faktisk skal jeg bruge 4, men jeg tænkte at jeg ville starte med to)
Avatar billede martinlind Nybegynder
31. juli 2002 - 11:49 #14
Jamen, så funker dit print jo, det må ligge i den måde du lopper rundt i gridet på, Coloren er åbenbart ikke clWhite, den kan jo havde en lille forskel som "ser hvid" ud men ikke er det.
Avatar billede jhald Nybegynder
31. juli 2002 - 12:02 #15
Det skulle virke nu - tak for det :)
Avatar billede martinlind Nybegynder
31. juli 2002 - 12:31 #16
Selv Tak
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester