Avatar billede stone Forsker
27. oktober 1999 - 23:50 Der er 15 kommentarer og
1 løsning

print af grafik og tekst i richedit

Jeg har indsat et panel og oveni Image
i RichEdit, brugeren kan så indsætte grafik som kan flyttes rundt.

er det muligt at printe grafik og tekst ud på en gang?
hvordan kan man skalere billedet under kørsel af programmet?

hvordan undgår man at brugeren kan trække grafikken ud af RichEdit?


Avatar billede snorga Nybegynder
28. oktober 1999 - 01:38 #1
Hvis du printer på printer.canvas så kan du tegne richedit'en på canvasen og der efter tegne image'et.
og så printer.enddoc når du er færdig.

du tjekke om image'ets top bliver mindre en richedit'ens top hvis den gør så skal image'ets top sættes til richedit.top.. det samme på de andre sider.
Avatar billede stone Forsker
28. oktober 1999 - 20:55 #2
har du et printer eksempel?
Avatar billede snorga Nybegynder
29. oktober 1999 - 08:53 #3
Printer.BeginDoc;
  with Printer.Canvas do
    Font.Style:=[bsBold];
    Font.Name:='Arial';
    Font.Size:=16;
    TextOut(20,20,'Test');
    Printer.NewPage;
    Font.Style:=[bsBold];
    Font.Name:='Arial';
    Font.Size:=20;
    TextOut(20,20,'Test');
  end;
  Printer.EndDoc;
Avatar billede snorga Nybegynder
29. oktober 1999 - 08:53 #4
..Husk at "uses printers"
Avatar billede stone Forsker
29. oktober 1999 - 21:45 #5
kan man printe tekst og grafik ud med det eksempel?
jeg får nogle fejlmeldinger,
Avatar billede snorga Nybegynder
30. oktober 1999 - 16:59 #6
Tekst kan skrives ud med textout.. men det kan ikke bruges til at skrive en richedit ud med. Grafik kan godt printes ud. Du skal bare bruges printer.canvas.draw(x,y,image1.picture.graphic)

Hvilke fejl?
Avatar billede stone Forsker
31. oktober 1999 - 12:17 #7
fejlmeldinger for [fsbold],textout(20,20,'test'),fontstyle:=[bsbold]

det ovenstående eksempel for udprintning af grafik, printer grafikken ud på et fastlagt koordinat, er det ikke muligt at printer selv finder ud af koordinatet, såsom hvis brugeren flytter grafikken.

Avatar billede bjk Nybegynder
03. november 1999 - 20:00 #8
Kan man ikke gøre sådan her..

Lav et panel af den størrelse som RichEdit'en skal have. Placer RichEditen på panel'et og anchor den til alle siderne. Du placerer så image't ovenpå panel'et også, så skulle det ikke være muligt at flytte image't udenfor.

For at printe det vil jeg så bruge panel'ets PainTo metode til at skrive til printeren device context. Dvs. noget lignende det her:

Printer.BeginDoc;
Panel1.PaintTo(Printer, X, Y);
Printer.EndDoc;

X og Y angiver hvor på siden der skal printes ud.

Hvis du skal skalere grafikken under kørslen så sæt imaget's stretch property til true, så skaleres billedet når du sætter billedets height og width.
Avatar billede stone Forsker
03. november 1999 - 23:04 #9
bjk

man kan stadig flytte bliiedet ud af formen.
skalering af billedet virker ikke, problemet kan muligvis ligge i koden som flytter billedet.

fejlmelding af printerkode:

incompatible types:'HDC' and 'Tprinter'


Avatar billede snorga Nybegynder
03. november 1999 - 23:12 #10
Wops.. [fsBold] ikke [bsBold]

i bjk's svar:
Fejl1:
Du kan selv lave et tjek på om billede kan flyttes..
I det sted du flytter billed kan du sætte noget ligende dette ind:
If image1.top>richedit1.top then image1.top:=richedit1.top
Det skal tilpasses men hvis du forstår hvad jeg mener burde det ikke være et problem..

Fejl2:
Prøv:
Panel1.PaintTo(Printer.canvas, ...
istedet for Panel1.PaintTo(Printer, ...
Avatar billede stone Forsker
04. november 1999 - 00:10 #11
snorga

i fejl1
jeg forstår ikke hvad du mener

fejl2
den linie i printer, giver samme fejlmelding, som den linie den erstatter.
incompatible types:'HDC' and 'Tprinter'

jeg prøvede at skrive fsbold i stedet for bsbold, jeg fik fejlmeldinger for linie 6 og 11 i dit eksempel.
Avatar billede snorga Nybegynder
04. november 1999 - 14:02 #12
Prøv lige at poste den kode du bruger til at flytte grafiken, så kan jeg bedre vise dig hvor og hvad der skal laves.

Du mangler måske en uses..
Avatar billede stone Forsker
04. november 1999 - 14:15 #13
koden til flytning af grafik:
{$R *.DFM}
const
Traekker:Boolean=False;
var
Sidste_x, Sidste_y:Integer;
procedure TForm1.Panel2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
mx,my:Integer;
begin
if (traekker)and( ssleft in shift) then
begin
mx:=Panel2.Left;
Panel2.Left:=Panel2.Left-(sidste_x-x);
mx:=Panel2.Left-mx;
my:=Panel2.Top;
Panel2.top:=Panel2.top-(Sidste_y-y);
my:=Panel2.Top-my;
sidste_y:=Y-my;
sidste_x:=x-mx;
end
else
traekker:= false;
end;

procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if (SSleft in shift) then begin
Traekker:= True;
Sidste_x:=x;
Sidste_y:=y;
end;
end;
Avatar billede snorga Nybegynder
04. november 1999 - 14:39 #14
Okay.. Vender lige tilbage til det med at trække..
først fejlene fra før:

TextOut(20,20,'Test');
ændres til:
Printer.Canvas.TextOut(20,20,'Test');

og
panel1.paintto(printer.canvas.HANDLE, ...

--
Trække tingen: Jeg er ikke helt sikker på hvad det er den skal holde sig indefor, jeg gætte på panel1. Hvis det ikke passer skal du bare ændre de steder der stå panel1 til det den skal holde sig indefor.

lige efter linien "Panel2.Left:=Panel2.Left-(sidste_x-x);"
//holder panel2 inden for panel1 venster kant
If panel2.left>panel1.left then panel2.left:=panel1.left;
//holder panel2 inden for panel1 højre kant
//(giver dog problemmer hvis panel2.width>panel1.width)
If panel2.left+panel2.width>panel1.left+panel1.width then panel2.left:=Panel1.left-panel2.width;

Det samme laves efter linien "Panel2.top:=Panel2.top-(Sidste_y-y);"
Her skal "left" byttes ud med "top", og "width" byttes ud med "height".
Avatar billede bjk Nybegynder
04. november 1999 - 19:43 #15
Er det ikke lettere at lave drag & drop ved at sætte dragmode til automatic på image't og så lave event handlers for OnStartDrag på image't og for OnDragOver og OnDragDrop på den/de controls som man kan droppe den i? Det gør ihvertfald at det er let at styre hvor man kan trække den hen. OnDragDrop handleren skal så sætte koordinaterne på image't til det sted hvor man dropper det.
Avatar billede snorga Nybegynder
04. november 1999 - 23:34 #16
Så kan man vel ikke se billedet bliver flyttet mens man trækker..?
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