Har forsøgt mig her:
procedure TfrmProfil.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then begin
//Hvis der er flueben
btnTegnClick(Sender);
Image1.Canvas.MoveTo(trunc(0), trunc(midY));
Image1.Canvas.LineTo(trunc(cx*4), trunc(midY));
end else begin
//Hvis der ikke flueben
btnClearClick(Sender);
btnTegnClick(Sender);
end;
end;
Men med flueben sker der ikke noget i første del af if-sætningen.
Her er hele min program kode -Unit:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Math, Spin, jpeg, ExtDlgs, printers, MinUnits;
type
TVingePkt = record
x: Real;
y: Real;
end;
TVingeKoord = record
Pkt1: TVingePkt;
Pkt2: TVingePkt;
end;
TfrmProfil = class(TForm)
btnExit: TButton;
Image1: TImage;
btnTegn: TButton;
seZoom: TSpinEdit;
btnGemJpeg: TButton;
PrintDialog1: TPrintDialog;
Label1: TLabel;
seVinkel: TSpinEdit;
Label2: TLabel;
btnClear: TButton;
btnPrint: TButton;
SavePictureDialog1: TSavePictureDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
Label4: TLabel;
btnSkalering: TButton;
edtSkalering: TEdit;
Label3: TLabel;
Button2: TButton;
CheckBox1: TCheckBox;
procedure btnTegnClick(Sender: TObject);
procedure seZoomChange(Sender: TObject);
procedure seVinkelChange(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure SaetKryds( center: TVingePkt; bredde: Integer);
procedure FormResize(Sender: TObject);
procedure btnGemJpegClick(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnSkaleringClick(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmProfil: TfrmProfil;
V: Real;
zoom:integer;
tilpasX, tilpasY, scaleX, scaleY, skalering, cx, cy, midY : real;
implementation
uses Unit1,Unit3,Unit5;
{$R *.dfm}
function VingePkt( x, y: Real): TVingePkt;
begin
Result.x := x;
Result.y := y;
end;
function RotatePkt(pkt: TVingePkt; v, cx,cy: Real): TVingePkt;
const
toPi = 2*Pi;
begin
v := v / 360; // ingen grund til at beregne den 4 gange.
Result.x := (pkt.x-cx)*cos(v*toPi) - (pkt.y-cy)*sin(v*toPi) + cx;
Result.y := (pkt.y-cy)*cos(v*toPi) + (pkt.x-cx)*sin(v*toPi) + cy;
end;
// Tegner en linie på canvas fra pkt1 til pkt2.
procedure DrawLine( pkt1, pkt2: TVingePkt);
begin
with frmProfil.Image1.Canvas do
begin
MoveTo( Round(pkt1.x), Round(pkt1.y));
LineTo( Round(pkt2.x), Round(pkt2.y));
end;
end;
// Tegn et kryds i Image1
procedure TfrmProfil.SaetKryds( center: TVingePkt; bredde: Integer);
var
topLeft,
topRight,
botLeft,
botRight: TVingePkt;
gemtFarve: TColor;
begin
// skal bruge en halv
// bredde fra center til hver side.
bredde := bredde div 2;
// Beregn hjoernepunkter, som var det
// et kvadrat der skulle tegnes uden om center.
topLeft.x := center.x - bredde;
botLeft.x := topLeft.x;
topLeft.y := center.y - bredde;
topRight.y := topLeft.y;
botRight.x := center.x + bredde;
topRight.x := botRight.x;
botRight.y := center.y + bredde;
botLeft.y := botRight.y;
// Roter krydset sammen med profilen.
topLeft := RotatePkt( topLeft, frmProfil.seVinkel.Value, center.x, center.y);
topRight := RotatePkt( topRight, frmProfil.seVinkel.Value, center.x, center.y);
botLeft := RotatePkt( botLeft, frmProfil.seVinkel.Value, center.x, center.y);
botRight := RotatePkt( botRight, frmProfil.seVinkel.Value, center.x, center.y);
// gem den farve der normalt tegnes med.
gemtFarve := frmProfil.Image1.Canvas.Pen.Color;
// skift farve til roed.
Image1.Canvas.Pen.Color := clRed;
// tegn diagonal fra øverste ventre hjørne
// til nederste højre.
DrawLine( topLeft, botRight);
// tegn digonal fra nederste venstre hjørne
// til øverste højre hjørne.
DrawLine( botLeft, topRight);
// skift farve til det der normalt tegnes med.
Image1.Canvas.Pen.Color := gemtFarve;
end;
procedure TfrmProfil.btnTegnClick(Sender: TObject);
var
koord: array[0..18] of TVingeKoord;
cx,midY : Real;
count: Integer;
begin
fmProfilValg.StandartTekstNaca4415;
midY := Image1.Height /1.5; // Midten af Image1
cx := Round( Naca4415X[ High( Naca4415X) - 1 ] * zoom / 4);
// zoom := Round( Image1.Width / X[High(X)])-1;
// beregn "absolutte" koordinater (uden rotation).
// tegn et kryds i (cx,midY).
// Hvis du vil have krydset i en fast str. uanset profilets
// str. skal du ikke gange med zoom...
// beregn "absolutte" koordinater (uden rotation).
koord[0].Pkt1 := VingePkt(0,midY);
koord[0].Pkt2 := VingePkt(0,midY);
for count := 1 to 18 do
begin
koord[count].Pkt1.x := Naca4415X[count]*zoom;
koord[count].Pkt1.y := midY - Naca4415op[count]*zoom;
koord[count].Pkt2.x := koord[count].Pkt1.x;
koord[count].Pkt2.y := midY - Naca4415ned[count]*zoom;
end;
// rotér koordinater
// vinklen bliver laest fra SpinEdit2. cy er midY. cx er midX,
// (cx,cy) er centrum for rotation.
for count := 0 to 18 do
begin
koord[count].Pkt1 := RotatePkt( koord[count].Pkt1, seVinkel.Value, cx, midY);
koord[count].Pkt2 := RotatePkt( koord[count].Pkt2, seVinkel.Value, cx, midY);
end;
// tegn på canvas.
for count := 0 to 17 do
begin
DrawLine( koord[count].Pkt1, koord[count+1].Pkt1);
DrawLine( koord[count].Pkt2, koord[count+1].Pkt2);
// Tegn 1/4 punktet
end;
// Hvis du vil have et større kryds, kan du ændre 2-tallet.
//Streg gennem korden
*****Her har jeg forsøgt at indsætte if-sætningen
*****og her tegnes stregen også rigtig.
*****men ved kald af "procedure TfrmProfil.btnTegnClick(Sender: TObject);"
*****Det er også her if-sætninge likke og måke konflikter dette?
SaetKryds( VingePkt( cx, midY), 3*zoom);
// zoom := Round( Image1.Width / X[High(X)])-1;
If (seZoom.Value = 0) then
seZoom.Value:=7;
end;
procedure TfrmProfil.btnClearClick(Sender: TObject);
var
r: TRect; // Firkanten der definerer image-vinduet.
begin
with Image1 do
begin
Picture := nil; // Fjern det billede der er der.
// prøv at finde firkanten med windows-funktionen
if not Windows.GetClientRect(Handle, r) then
// ellers bare brug width / height af image.
r := Rect( 0, 0, Width, Height);
Canvas.FillRect( r); // fyld imagevinduet med hvid.
end;
end;
procedure TfrmProfil.FormResize(Sender: TObject);
begin
btnClear.Click; // Clear image1
btnTegn.Click; // Gentegn profilen.
end;
procedure TfrmProfil.btnSkaleringClick(Sender: TObject);
begin
skalering:= IndtastKommaTal('Tilpasning for udskrivning på printer',185);
edtSkalering.Text:= FloatToStr(skalering);
end;
procedure TfrmProfil.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then begin
btnTegnClick(Sender);
Image1.Canvas.MoveTo(trunc(0), trunc(midY));
Image1.Canvas.LineTo(trunc(cx*4), trunc(midY));
end else begin
btnClearClick(Sender);
btnTegnClick(Sender);
end;
end;
end.
Håber du har en løsning!
Med venlig hilsen
Monie Jacobsen