Autor Beitrag
SweeT_C
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Do 08.11.07 16:26 
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:

ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R WinXP.res}

var
  hoehe:extended = 190; //Höhe des Etiketts in mm
  oben:integer = 100; // Abstand des etiketts vom oberen canvas rand
  links:integer = 100; //links
  linienAbstand:extended = 29; //  Abstand der Linien
  ErsteLinie:extended = 35; //Abstand von Unten

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;      //Abstand links, rechts, oben & unten
        h1, h2:integer;
        p_breite:integer;
begin
p_breite:=MMtoPixels(Breite);
//--- Abstand Links.
Ab_l:=p_breite-Form1.image2.width;
Ab_l:=Round(Ab_l/2);
//--- Abstand Rechts
Ab_r:=Ab_l+Form1.Image2.Width;
//--- Abstand Unten
h1:=(Form1.Image1.Height)-(MMToPixels(hoehe)+oben);
h1:=Form1.Image1.Height-h1; //Abstand Rahmen ~ Image1
h2:=Round((MMToPixels(ErsteLinie))/2); //Center ~ iRahmen
Ab_u:=h1+h2+Form1.Image2.Height; //Unterer Abstand ~ Position iRahmen
//--- Abstand Oben
Ab_o:=Ab_u-Form1.Image2.Height;
//---Los Geht's
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.
Einloggen, um Attachments anzusehen!
SweeT_C Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: Fr 09.11.07 21:39 
HAt denn keiner eine Ahnung ?