/ Forside/ Teknologi / Udvikling / Delphi/Pascal / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
CheckBox1 on/off med flueben?
Fra : MonieJacobsen
Vist : 1691 gange
100 point
Dato : 22-04-04 16:08

Ved indsætning af flueben skal nedtående if-sætning køres og når fluebenet fjernes
skal proceduerne: btnClearClick(Sender: TObject); og btnTegnClick(Sender: TObject); aktiveres.


if CheckBox1.Checked then begin
Image1.Canvas.MoveTo(trunc(0), trunc(midY));
Image1.Canvas.LineTo(trunc(cx*4), trunc(midY));
end;

Med venlig hilsen
Monie Jacobsen

 
 
Kommentar
Fra : jrossing


Dato : 22-04-04 16:29

Jeg mener der er en OnClick event på CheckBox'en, der kan du indsætte din kode:

If CheckBox1.Checked then begin
...
...
end else begin
...
...
end;

Kommentar
Fra : MonieJacobsen


Dato : 22-04-04 17:46

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




Accepteret svar
Fra : gandalf

Modtaget 100 point
Dato : 22-04-04 19:08

Hej Monie Jacobsen

Dit problem ligger ikke i at onclick ikke virker. Denne event bliver skudt af både når du sætter og sletter markeringen.

Prøv dette eksempel :

Kode
if (sender as tcheckbox).Checked then
label1.Caption := 'yep'
else
label1.Caption := 'nope';


Dette virker fint, så dit problem må ligge et andet sted.

Gandalf

Kommentar
Fra : MonieJacobsen


Dato : 23-04-04 11:40

Har afprøvet nedstående kode men får fejmeddelsen:

[Error] Unit1.pas(32): Operator not applicable to this operand type
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if (sender as CheckBox1).Checked then
label1.Caption := 'yep'
else
label1.Caption := 'nope';
end;

Hvad gøres der forkert her?

Mvh
Monie Jacobsen

Kommentar
Fra : MonieJacobsen


Dato : 26-04-04 19:20

Har selv fundet på en anden løsning, derfor lukkes denne trå.


Godkendelse af svar
Fra : MonieJacobsen


Dato : 29-04-04 05:52

Tak for svaret gandalf.
                        

Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste