Avatar billede iver25 Nybegynder
24. oktober 2001 - 10:43 Der er 63 kommentarer og
1 løsning

Opstilling af print

Jeg har problemer med at udskrive. Jeg skal have udskrevet de værdier der står i nogle editbokse, samt et billede (til medlemskort). Værdierne skal skrives ud på en bestemt placering på kortet, samt i en betemt størrelse.
Avatar billede martinlind Nybegynder
24. oktober 2001 - 10:56 #1
Du skal evt. bruge QuickRep. eller gøre det selv med TPrinter obj. men det er pixel orienteret og du skal så selv regne på din printers opløsning
Avatar billede iver25 Nybegynder
24. oktober 2001 - 12:41 #2
Jeg har fundet følgende kode i hjælpe-filen:

var
  Line: Integer;
  PrintText: TextFile;  {declares a file variable}
begin
  Printmedlem.Execute;
  if Printmedlem.Execute then
  begin
    AssignPrn(PrintText);  {assigns PrintText to the printer}
    Rewrite(PrintText);    {creates and opens the output file}
    Printer.Canvas.Font := edtNavn.Font;  {assigns Font settings to the canvas}
    write(Printtext, edtNavn.Text);
    writeln(Printtext, imgmedlem.Picture.);
    CloseFile(PrintText); {Closes the printer variable}
  end;
end;

Det virker fint nok, men hvordan får jeg et billede med på denne måde? Den skriver at det er en \"illegal type\"
Avatar billede martinlind Nybegynder
24. oktober 2001 - 12:46 #3
Printer.Canvas.Draw();

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 12:57 #4
Det ser ud til at virke fint. Et hurtigt lille spørgsmål. Hvordan får jeg den til at udskrive det billede der bliver vist i imgMedlem, i stedet for hele billedet? Kan man ændre i størrelsen på billedet, og hvilken del af billedet der skrives ud?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 13:42 #5
Canvas.StrechDraw()
Avatar billede martinlind Nybegynder
24. oktober 2001 - 13:43 #6
Hvis du skal havde det mere avanceret skal du nok kigge på BitBlt()
Avatar billede iver25 Nybegynder
24. oktober 2001 - 14:16 #7
Kan du komme med et kort eksempel på hvordan det virker. Jeg kan ikke finde noget om BitBlt() i hjælpen`?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 14:20 #8
kig i API hjælpen, den er ret avanceret

BOOL BitBlt(

    HDC hdcDest,    // handle to destination device context
    int nXDest,    // x-coordinate of destination rectangle\'s upper-left corner
    int nYDest,    // y-coordinate of destination rectangle\'s upper-left corner
    int nWidth,    // width of destination rectangle
    int nHeight,    // height of destination rectangle
    HDC hdcSrc,    // handle to source device context
    int nXSrc,    // x-coordinate of source rectangle\'s upper-left corner 
    int nYSrc,    // y-coordinate of source rectangle\'s upper-left corner
    DWORD dwRop     // raster operation code
  );
Avatar billede iver25 Nybegynder
24. oktober 2001 - 14:53 #9
Jeg har lidt problemer med dem der hedder HDC. Hvad er det? Hvis du hjælper mig til at få det her til at virke, så er der 100 point til dig...
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:01 #10
HDC er din Canvas.Handle og så prøv
Image1.Picture.Bitmap.Canvas.Handle for dit Image

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:05 #11
Jeg har lavet følgende for at se om det virker:

procedure TfrmMedlem.Button1Click(Sender: TObject);
var
  Billede : TBitmap;
begin
  BOOL BitBlt(Billede,50,50,150,200,imgMedlem.Picture.Bitmap.Handle,10,10,BLACKNESS);
end;

Den skriver at \"HDC og TBitmap er inkompatible typer\", og at der mangler en ( et eller andet sted?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:08 #12
procedure TfrmMedlem.Button1Click(Sender: TObject);
var
  Billede : TBitmap;
begin
  if not BitBlt(Billede,50,50,150,200,imgMedlem.Picture.Bitmap.Canvas.Handle,10,10,BLACKNESS) then ShowMessage(\'Fejl ved ud print af billed\');
end;

Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:15 #13
  if not BitBlt(Billede.Handle,50,50,150,200,imgMedlem.Picture.Bitmap.Canvas.Handle,10,10,BLACKNESS) then ShowMessage(\'Fejl ved ud print af billed\');

Jeg ved ikke om du glemte det, men skulle der ikke så \"Billede.Handle\" i starten? Ellers får jeg en type fejl

Nu fik jeg en \"Acces Violation\"

Det jeg gerne vil have er et TImage, der kun viser noget af et billede, og som så kan skrives ud. K
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:23 #14
Det gjore jeg *S*

Laver lige et noget kode der måske virke
Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:25 #15
Det lyder godt. Tak
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:28 #16
Prøv sådan her :

VAR
  TmpCanvas : TCanvas;
begin
  TmpCanvas := TCanvas.Create;
  TmpCanvas.Draw(0,0,imgMedlem.Picture.Bitmap);
  if not BitBlt(Printer.Canvas.Handle,50,50,150,200,TmpCanvas.Handle,10,10,BLACKNESS) then ShowMessage(\'Fejl ved ud print af billed\');
end;

Jeg har lavet en tmp canvas som jeg smider dit img over på og kopi\'er derfra ud på din printer canvas

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:33 #17
Så får jeg en \"Canvas does not allow drawing\"
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:36 #18
Hvad hvis du gjore sådan her :

if not BitBlt(Printer.Canvas.Handle,50,50,150,200,imgMedlem.Picture.Bitmap.Canvas.Handle,10,10,BLACKNESS) then ShowMessage(\'Fejl ved ud print af billed\');

Hvad sagde den så ??
Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:38 #19
Så får jeg en fejl jeg aldrig har set før, nemlig \"Printer is not currently printing\"!
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:40 #20
Ellers så prøv lige denne her


imgMedlem.Picture.Bitmap.Canvas.CopyRect();

Den kan sku det du skal bruge tror jeg
Avatar billede iver25 Nybegynder
24. oktober 2001 - 15:42 #21
Jeg er ikke helt med. Skal jeg sætte det ind i den BitBlt sætning vi legede med før?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 15:46 #22
Nej Drop bitblt og prøv copyrect i stedet for
Avatar billede iver25 Nybegynder
24. oktober 2001 - 16:02 #23
Nu skal jeg nok snart give dig dine point. Jeg har skrevet følgende, Men jeg kan ikke rigtig se om det virker før jeg sætter det ind i en TImage. Jeg har en der hedder imgMedlem. Hvordan gør jeg det?

VAR
  image : TRect;
begin

  imgMedlem.Picture.Bitmap.Canvas.CopyRect(image, Canvas, imgMedlem.Picture.Bitmap.Canvas.ClipRect);
  image.Left := 50;
  image.Top := 50;
  image.Right := 300;
  image.Bottom := 350;
Avatar billede martinlind Nybegynder
24. oktober 2001 - 16:08 #24
Jeg er ikke helt med på hvad du mener ??, skal du ikke bare printe ud fra din ImgMedlem ?
Avatar billede iver25 Nybegynder
24. oktober 2001 - 16:11 #25
Jo, det skal jeg også, men jeg vil også gerne vise det rigtige billede inden jeg skriver det ud. Jeg skal lave et medlemskort, hvor jeg tager billedet med et webcam. Men det er svært kun at tage billede af hovedet på en person. Derfor er det nødvendigt at kunne klippe noget af billedet ud, og det ville jo være rart at kunne se det i et TImage før man printede det ud!
Avatar billede martinlind Nybegynder
24. oktober 2001 - 16:13 #26
Lav to Img comp. og bruge CopyRect så kan du se det på skærmen inden du printer det ud

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 16:16 #27
Jeg er ikke helt med på hvad du mener.
Kan jeg ikke bare bruge det image jeg har lavet, og vise det i en TImage?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 16:20 #28
Jo sagtens, det var bare mig der ikke var helt med tror jeg.

( i Delphi kan man hvad man vil *GG* )

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 16:21 #29
Kunne du så ikke lige vise mig hvordan??? Jeg er rimelig forvirret lige nu.....
Avatar billede martinlind Nybegynder
24. oktober 2001 - 16:26 #30
Hvad hedder den TImage Comp. du skal vise det i og hvad hedder den Image du har lavet ??
Avatar billede iver25 Nybegynder
24. oktober 2001 - 16:27 #31
Den image jeg har lavet, er lavet ud fra denne kode: (Jeg ved ikke om det er rigtigt/virker)!

VAR
  image : TRect;
begin

  imgMedlem.Picture.Bitmap.Canvas.CopyRect(image, Canvas, imgMedlem.Picture.Bitmap.Canvas.ClipRect);
  image.Left := 50;
  image.Top := 50;
  image.Right := 300;
  image.Bottom := 350;

Den TImage jeg gerne vil vise den i hedder imgMedlem
Avatar billede martinlind Nybegynder
24. oktober 2001 - 17:01 #32
imgMedlem.Picture.Bitmap.Canvas.CopyRect(image, Canvas, imgMedlem.Picture.Bitmap.Canvas.ClipRect);
  *

Hvilken Canvas er dette ?? det bliver formens hvis du ikke skriver \"hvor den hører til\" din Image er kun et Område ( TRect )

imgMedlem.Picture.Bitmap.Assign(NyImage.Picture.Bitmap);

/Martin
Avatar billede martinlind Nybegynder
24. oktober 2001 - 17:02 #33
Fuck stjernen står forkert *S*

imgMedlem.Picture.Bitmap.Canvas.CopyRect(image, >>Canvas<<, imgMedlem.Picture.Bitmap.Canvas.ClipRect);
 
Avatar billede iver25 Nybegynder
24. oktober 2001 - 17:04 #34
Jeg skrev bare Canvas fordi den ville have en Canvas med i kaldet. Jeg ved ikke hvad jeg ellers skal skrive???
Avatar billede iver25 Nybegynder
24. oktober 2001 - 17:06 #35
Hvad skal jeg skrive i stedet for >>Canvas<<???
Avatar billede iver25 Nybegynder
24. oktober 2001 - 17:08 #36
Hvis jeg skriver dette her:

  imgMedlem.Picture.Bitmap.Assign(image.picture.bitmap);

Får jeg en \"Undeclared identifier \'Picture\'\"

image er jo en TRect, og ikke et TImage. Har det noget at sige?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 17:09 #37
imgMedlem.Picture.Bitmap.Canvas.CopyRect(image, imgMedlem.Picture.Bitmap.Canvas, imgMedlem.Picture.Bitmap.Canvas.ClipRect);

Du kan prøve sådan, så skulle den kopiere fra sig selv til sig selv, ved ikke om den kan finde ud af det, hvis ikke må du lave en extra Bitmap du kan Draw\'e over på og så tilbage fra med CopyRect()
 
Avatar billede martinlind Nybegynder
24. oktober 2001 - 17:11 #38
Ja du kan ikke bruge en Image : TRect som en TImage comp. den går ikke, men prøv lige det jeg har skrevet
Avatar billede iver25 Nybegynder
24. oktober 2001 - 17:12 #39
Det æder den fint nok, men jeg har stadig problemet med at få det vist på mit skærmbillede! Kan jeg bruge noget andet en TImage?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 18:20 #40
Du kan da gøre som jeg foreslog, måske har du sat Strech til true på din image comp., men du kan da bare putte en image comp. mere på din form, eller lave en ny form hvor du viser den på, som du så lukker igen, ellers kan jeg ikke komme på nogle idér, men en TImage er den eneste Image comp. der er. Hvis den æder det og gør noget men det ikke ser ud som om der er nogen forskel, så er det nok dine Rect\'s du skal checke, om de er rigtige eller om du bare kopier det til samme størelse

/Martin
Avatar billede iver25 Nybegynder
24. oktober 2001 - 18:24 #41
Jeg prøver om jeg kan få det til at virke. Tak for hjælpen. Du har fortjent de 100 point. Hvis du er interesseret i at tjene 100 point mere, kan du jo kigge på dette spørgsmål:

http://www.eksperten.dk/spm/124828
Avatar billede iver25 Nybegynder
24. oktober 2001 - 18:38 #42
Hvordan får jeg en TRect vist i en TImage?
Avatar billede martinlind Nybegynder
24. oktober 2001 - 20:35 #43
Du har misforstået noget en TRect er IKKE et billed, det er bare størelsen på en firkant, en måde at angive et område på. Så du skal havde en Image med Org. billedet og en Image til det nye billede også angive området med en TRect.
Avatar billede iver25 Nybegynder
24. oktober 2001 - 20:40 #44
Det er det med at angive området med en TRect der er problemet. Jeg tror det er den rigtige måde at gøre det på, men jeg kan ikke få det til at virke.

Kan du give et eksempel på et TImage der bliver loadet fra en fil, hvor du bruger TRect til at angive det område du vil have vist. Det ville være fedt!!!!!
Avatar billede martinlind Nybegynder
24. oktober 2001 - 20:55 #45
Nej, men jeg har lige prøvet at copyrect fra en Image comp. til en PaintBox comp. det virker
Lav en form smid en Image comp. på og en paintbox comp. på og en knap skriv denne kode i onclick event\'en på knappen :


procedure TForm1.Button1Click(Sender: TObject);
VAR
  R,R2 : TRect;
  X : Integer;
begin
  X := 50;
  R.Left := X;
  R.Top := X;
  R.Right := R.Left + ( Image1.Width - X );
  R.Bottom := R.Top + ( Image1.Height - X );
  R2.Left := 0;
  R2.Right := Image2.Width;
  R2.Top := 0;
  R2.Bottom := Image2.Height;
  PaintBox1.Canvas.CopyRect(R2,Image1.Picture.Bitmap.Canvas,R);
end;

Jeg kunne ikke få den til at kopiere fra en image comp. til en anden, hvorfor ved jeg ikke lige, men måske du kan få noget ud af dette eks.
Avatar billede iver25 Nybegynder
24. oktober 2001 - 21:03 #46
Skal der ikke et billede ind på en eller anden måde? Er det en fejl at der står Image\", eller er det paintbox\'en der skal hedde det?
Avatar billede iver25 Nybegynder
24. oktober 2001 - 21:09 #47
Jeg har fået et billede ind i TImage med en \"OpenPictureDialog\", og den er kopieret over i paintbox\'en, men den har samme størrelse. Er det meningen at der skal stå Image2 i ovenstående kode?
Avatar billede martinlind Nybegynder
25. oktober 2001 - 09:27 #48
NEj Du kan loade en billede ind i Image comp. fra objectinspectoren, og så compilere, så kopierer den billedet over i paintbox\'en fra 50,50,width-50,height-50, altså et udsnit af det org. billed, det virkede hos mig.

Gå ind på www.e-lind.dk og hent eks. om 20 min.

/Martin
Avatar billede martinlind Nybegynder
25. oktober 2001 - 10:06 #49
Med nr 2 eks. kan du markere en område på billedet som den kopiere ( den tegner det ikke, men du cliker ned og flytter musen med og slipper, så har du markeret )

Leg lidt med dem, det burde kunne skubbe dig det sidste stykke

/Martin
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:12 #50
Du har været til KANON hjælp. Er du sikker på du ikke vil hjælpe mig med mit Chart problem? Der vil være mange point at hente. Jeg er ved at lave hovedopgave på Datamatikeruddannelsen, og jeg skal være færdig med at programmere d. 1. november, så jeg er lidt presset.

http://www.eksperten.dk/spm/124828
Avatar billede martinlind Nybegynder
25. oktober 2001 - 10:18 #51
Jeg har ikke leget så meget med TChart, så den har jeg ikke den store erfaring med, derfor havde jeg ikke lige et bud på dit problem :(, måske hvis jeg får tid, så smider jeg et svar

/Martin
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:20 #52
Takker!
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:31 #53
Lige et sidste problem.....:)

Den zoomer helt vildt når jeg prøver at klippe noget ud. Det er kun hvis jeg klipper hele billedet ud igen, at det har den rigtig størrelse, og så går ideen ligesom af det. Hvis man klipper en lille smule ud, zoomer den meget. Det billede jeg klipper fra, er noget større end det endelige billede.
Avatar billede martinlind Nybegynder
25. oktober 2001 - 10:39 #54
Det er fordi du skal rette størelsen på den første Rect i CopyRect() func. den første Rect bestemmer Dest. størelsen

/Martin
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:42 #55
Er det X du mener? Den har jeg sat til både 0 og 300, og det giver det samme?
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:48 #56
Så nu tror jeg det virker. Det var R2 jeg skulle rette på. Kan man ikke på en eller anden måde få en fast firkant som man kan se, til at skære den del af billedet ud man vil have. Problemet er, at hvis du ikke gør det i de helt rigtig proportioner når du trækker musen over billedet, kommer der en masse røde klatter i billedet.
Avatar billede martinlind Nybegynder
25. oktober 2001 - 10:51 #57
Nej, hvis det er eks. 2 du bruger, så bliver X slet ikke brugt, det er størelsen på R2 du skal rette :

  R2.Left := 0;
  R2.Right := R.Right - R.Left;
  R2.Top := 0;
  R2.Bottom := R.Bottom - R.Top;


Sådan skulle kunne gøre tricket
Avatar billede martinlind Nybegynder
25. oktober 2001 - 10:53 #58
Du kan jo prøve at lege med at tegne en firkant som svarer til det du selecter :)
Avatar billede iver25 Nybegynder
25. oktober 2001 - 10:56 #59
Det ser ud til at det virker. Helt kanon. Tak endnu engang. Nu skal jeg bare have gemt det nye billede på harddisken, så er jeg køreklar!
Avatar billede martinlind Nybegynder
25. oktober 2001 - 11:02 #60
B : TBitmap;

begin
  B := TBitmap.Create;
  // Sæt bitmap sørelsen
  // Kopier dit nye billed over på bitmap canvas\'en
  B.SaveToFile();
  B.Free;
end;
Avatar billede iver25 Nybegynder
25. oktober 2001 - 11:05 #61
Lige et hurtigt spørgsmål. Kan det kun lade sig gøre med *.bmp billeder, eller kan man bruge *.jpg? Jeg har prøvet med *.jpg men så sker der ikke noget?
Avatar billede martinlind Nybegynder
25. oktober 2001 - 11:11 #62
Du kan kigge i WEB-ISAPI eks. og se hvordan du konverter et JPG Billede, Delphi har en JPG klasse.
Avatar billede iver25 Nybegynder
25. oktober 2001 - 11:48 #63
Hvordan kopierer jeg indholdet af paintboxen over i det nyt bitmap? Jeg har indtil videre skrevet følgende:

var
  b : TBitmap;
begin
  b := TBitmap.Create;
  b.Height := 120;
  b.Width := 80;
//Her skal jeg så have kopieret det nye billede over på bitmap canvas\'en.

I stedet for Paintbox1, hedder den nu imgMedlemNyt
Avatar billede martinlind Nybegynder
25. oktober 2001 - 12:03 #64
B.CopyRect(DestRect,imgMedlemNyt.Canvas,SourceRect);

Størelsen på DestRect og SourceRect, må du selv lige tilpasse

/Martin
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