Hallihallo,
im Infounterricht programmieren wir gerade ein Programm, dass Etiketten für die Rückseite von Ordnern erstellen soll. An sich ist das nicht schwer, nur hab ich folgendes Problem:
in image2 hab ich das Logo geladen, dass aufs etikett kommen soll (s. anhang). Das wollte ich per CopyRect auf das canvas von image1 kopieren. Damit es auch an der richtigen Position und zentriert ist, habe ich eine Prozedur, die das realisieren soll. Allerdings will die Prozedur nciht so, wie ich will. Das ERgebnis ist im Anhang. Ich hab's mir angeguckt und konnte keinen fehler finden, hab auch schonmal ne neue Prozedur geschrieben, die aber zu genau dem gleichen ergebnis kam.
Im Anhang ist eine erklärung der Variablen mit Zeichnung etc..
Hier die VAriablen aus dem Code:
Ab_r, Ab_l etc geben den Abstand des logos vom CanvasRand ab, nicht vom Rand des Rechtecks.
Hier noch der Code:
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: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, ExtDlgs;
type TForm1 = class(TForm) Image1: TImage; Zeichnen: TBitBtn; Drucken: TBitBtn; Ende: TBitBtn; Panel1: TPanel; Abteilung_edit: TEdit; Inhalt_3_edit: TEdit; Inhalt_1_edit: TEdit; Inhalt_2_edit: TEdit; Image2: TImage; logo: TBitBtn; ComboBox1: TComboBox; OpenPictureDialog1: TOpenPictureDialog; procedure EndeClick(Sender: TObject); procedure logoClick(Sender: TObject); procedure ZeichnenClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} {$R WinXP.res}
var hoehe:extended = 190; oben:integer = 100; links:integer = 100; linienAbstand:extended = 29; ErsteLinie:extended = 35; function MMToPixels(MM:extended):Integer; begin Result:=Trunc((mm/25.4*screen.pixelsperInch)); end;
procedure ZeichneLogo(Breite:extended); var r1, r2:TRect; Ab_l, Ab_r, Ab_o, Ab_u:Integer; h1, h2:integer; p_breite:integer; begin p_breite:=MMtoPixels(Breite); Ab_l:=p_breite-Form1.image2.width; Ab_l:=Round(Ab_l/2); Ab_r:=Ab_l+Form1.Image2.Width; h1:=(Form1.Image1.Height)-(MMToPixels(hoehe)+oben); h1:=Form1.Image1.Height-h1; h2:=Round((MMToPixels(ErsteLinie))/2); Ab_u:=h1+h2+Form1.Image2.Height; Ab_o:=Ab_u-Form1.Image2.Height; r1:=Form1.Image2.ClientRect; r2:=rect(Ab_l, Ab_o, Ab_r, Ab_u); Form1.Image1.Canvas.CopyRect(r2, Form1.Image2.Canvas, r1);
end;
procedure TForm1.EndeClick(Sender: TObject); begin close; end;
procedure TForm1.logoClick(Sender: TObject); begin if openpicturedialog1.Execute then begin image2.Picture.LoadFromFile(openpicturedialog1.FileName); end; end;
procedure TForm1.ZeichnenClick(Sender: TObject); var re, re2: TRect; begin Form1.Image1.Canvas.Rectangle(links, oben,(MMtoPixels(80)+links),(MMtoPixels(hoehe)+oben));
ZeichneLogo(80);
end;
end. |