unit Kaartje;
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
{$ASSERTIONS ON}
interface
uses
{$IFnDEF FPC}
Jpeg, XPMan,
{$ELSE}
{$ENDIF}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ClipBrd, DateUtils, Buttons,StrUtils,
ShellAPI, ExtCtrls, Menus,
NumEdit;
const
ColCount = 12;
RowCount = 12;
NrEdits = RowCount * ColCount;
type
THokjes = array[0..NrEdits-1] of TNumEdit;
THokjesValues = array[0..NrEdits-1] of Integer;
TRowLabels = array[0..RowCount] of TLabel;
TColLabels = array[0..ColCount] of TLabel;
{ TMyForm }
TMyForm = class(TForm)
private
{ Private declarations }
FSuppressEditBoxesOnChange: Boolean;
FHokjes: THokjes;
MC, MaxW: Integer;
KaartCode:string;
RowLabels: TRowLabels;
ColLabels: TColLabels;
procedure OnEditBoxesChange(Sender: TObject);
procedure OnEditBoxesKeydown (Sender: TObject; var Key: Word; Shift: TShiftState);
procedure CreateEditBoxes;
function GetHokjes(AIndex: Integer): TNumEdit; overload;
function GetHokjes(ARow, ACol: Integer): TNumEdit; overload;
procedure RowColToIndex(const ARow, ACol: Integer; out AIndex: Integer);
procedure IndexToRowCol(const AIndex: Integer; out ARow, ACol: Integer);
procedure Kaarttel;
procedure Klembord;
procedure RijenTel;
procedure RijenLeeg;
procedure KolommenTel;
procedure KolommenLeeg;
procedure Wissen;
procedure CreateRowColLabels;
function NotZero(AValue: Integer; ValueIfZero: Integer): Integer;
procedure DoDebugTesting;
published
CopyCode: TButton;
Shape1: TShape;
btWissen: TButton;
MAXDeck: TEdit;
lblCol1: TLabel;
lblCol2: TLabel;
lblCol3: TLabel;
lblCol4: TLabel;
lblCol5: TLabel;
lblCol6: TLabel;
lblCol7: TLabel;
lblCol8: TLabel;
lblCol9: TLabel;
lblCol10: TLabel;
lblCol11: TLabel;
lblCol12: TLabel;
lblRow1: TLabel;
lblRow2: TLabel;
lblRow3: TLabel;
lblRow4: TLabel;
lblRow5: TLabel;
lblRow6: TLabel;
lblRow7: TLabel;
lblRow8: TLabel;
lblRow9: TLabel;
lblRow10: TLabel;
lblRow11: TLabel;
lblRow12: TLabel;
TelRijenCB: TCheckBox;
TelKolommenCB: TCheckBox;
TelAllesCB: TCheckBox;
Uittellen: TButton;
PopupMenu1: TPopupMenu;
N29kaarten1: TMenuItem;
N310kaarten1: TMenuItem;
N3201: TMenuItem;
btHelp: TButton;
lbMagCard: TLabel;
N515kaarten1: TMenuItem;
Label1: TLabel;
lbHorizon: TLabel;
lbVertial: TLabel;
URLlabel: TLabel;
Label2: TLabel;
meKlembord: TMemo;
procedure CopyCodeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure btWissenClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TelRijenCBClick(Sender: TObject);
procedure TelKolommenCBClick(Sender: TObject);
procedure TelAllesCBClick(Sender: TObject);
procedure UittellenClick(Sender: TObject);
procedure N29kaarten1Click(Sender: TObject);
procedure N310kaarten1Click(Sender: TObject);
procedure N3201Click(Sender: TObject);
procedure btHelpClick(Sender: TObject);
procedure MAXDeckChange(Sender: TObject);
procedure N515kaarten1Click(Sender: TObject);
procedure URLlabelClick(Sender: TObject);
public
{ Public declarations }
property Hokjes[AIndex: Integer]: TNumEdit read GetHokjes;
property HokjesMatrix[ARow, ACol: Integer]: TNumEdit read GetHokjes;
end;
var
MyForm: TMyForm;
implementation
uses
Data;
{$IFnDEF FPC}
{$R *.dfm}
{$ELSE}
{$R *.lfm}
{$ENDIF}
Procedure TMyForm.Kaarttel;
var k, y, Value: integer;
blVlag: boolean;
begin
kaartcode:='';
k:=0;
MC:=0;
blVlag:=false;
for y := 0 to NrEdits-1 do // is van Hokjes 1 t/m 144
begin
inc(k); // Rijtjes van 12 maken
//-----
if Hokjes[y].Text <> '' then // Edithokje is standaard tekst
begin
Value := Hokjes[y].Value; //GetHokjesValue(y);
//******************
Assert(Value <= MaxW,Format('Error Hokje[%d]: Value (%d) > MaxW (%d)',[y,Value,MaxW]));
//******************
blVlag:=true;
if Value > 0 then // Alle hokjes voor verschillende forums
begin
//******************
Assert(MC <= 143*MaxW,format('Error: MC (%d) > 143*MaxW (%d), when y=%d',[MC, 143*MaxW,y]));
//******************
Inc(MC,Value);
if MaxW <= 36 then
kaartcode:=kaartcode+' - '+kaartxt[Value]
else
kaartcode:=kaartcode+' - '+(Hokjes[y].Text);
end;
end;
//-----
if k=12 then
begin
if blVlag then // Knip de verschillende Tekststrings in stukjes van 12
begin
kaartcode:=kaartcode+Chr(13)+Chr(10);
kaartcode:=stringreplace(kaartcode,chr(13)+chr(10)+' -',chr(13)+chr(10),[]);
end;
k:=0;
blVlag:=false
end;
//-----
end;
Delete(kaartcode,1,2); // De 1e 2 karakters uit de Tekststring strippen.
//--------------------
if MC>MaxW then MC:=MC mod MaxW;
//OPM BB: Onderstaande regel doet helemaal niets !!!
if (MC>0) and (MC<MaxW) then MC:=MC; // RESTWaarde kan natuurlijk 0 zijn!
if (MaxW=36)and (MC>0) and (MC<37) then
lbMagCard.Caption:=kaartxt[MC]
else
lbMagCard.Caption:='Nr. '+inttostr(MC);
end;
procedure TMyForm.Rijentel;
var
ACol, ARow, Sum: Integer;
Begin
for ARow := 0 to RowCount - 1 do
begin
Sum := 0;
for ACol := 0 to ColCount - 1 do
Sum := Sum + HokjesMatrix[ARow, ACol].Value;
//als Sum Mod MaxW = 0 dan wordt Sum MaxW als tenminste 1 van de hokjeswaardes > 0 is
//dat is alleen het geval als Sum > 0 is
//en Mod MaxW is alleen nodig als Sum > MaxW is derhalve
if (Sum > MaxW) then
begin
Sum := Sum mod MaxW ;
if (Sum = 0) then
Sum := MaxW
end;
RowLabels[ARow].Caption:=IntToStr(Sum);
//writeln('RijenTel: RowLabels[',ARow:2,'].Caption = ',Sum:2);
end;
End;
procedure TMyForm.RijenLeeg;
Begin
lblRow1.Caption:='---';lblRow2.Caption:='---';lblRow3.Caption:='---';lblRow4.Caption:='---';
lblRow5.Caption:='---';lblRow6.Caption:='---';lblRow7.Caption:='---';lblRow8.Caption:='---';
lblRow9.Caption:='---';lblRow10.Caption:='---';lblRow11.Caption:='---';lblRow12.Caption:='---';
End;
procedure TMyForm.KolommenTel;
var
ARow, Sum, ACol: Integer;
Begin
for ACol := 0 to ColCount - 1 do
begin
Sum := 0;
for ARow := 0 to RowCount - 1 do
Sum := Sum + HokjesMatrix[ARow, ACol].Value;
//als Sum Mod MaxW = 0 dan wordt Sum MaxW als tenminste 1 van de hokjeswaardes > 0 is
//dat is alleen het geval als Sum > 0 is
//en Mod MaxW is alleen nodig als Sum > MaxW is derhalve
if (Sum > MaxW) then
begin
Sum := Sum mod MaxW ;
if (Sum = 0) then
Sum := MaxW
end;
ColLabels[ACol].Caption:=inttostr(Sum);
end;
end;
procedure TMyForm.Kolommenleeg;
Begin
lblCol1.Caption:='---';lblCol2.Caption:='---';lblCol3.Caption:='---';lblCol4.Caption:='---';
lblCol5.Caption:='---';lblCol6.Caption:='---';lblCol7.Caption:='---';lblCol8.Caption:='---';
lblCol9.Caption:='---';lblCol10.Caption:='---';lblCol11.Caption:='---';lblCol12.Caption:='---';
End;
procedure TMyForm.Wissen;
var
i : integer;
begin
FSuppressEditBoxesOnChange := True;
try
for i := 0 to NrEdits-1 do
begin
Hokjes[i].Clear;
Hokjes[i].Color:=clWindow;
end;
TelRijenCB.Checked:= false;
TelKolommenCB.Checked:= false;
TelAllesCB.Checked:= false;
Rijenleeg;
Kolommenleeg;
lbMagCard.Caption:='??';
meKlembord.Clear;
finally
FSuppressEditBoxesOnChange := False;
end;
End;
procedure TMyForm.CreateRowColLabels;
begin
RowLabels[0] := lblRow1;
RowLabels[1] := lblRow2;
RowLabels[2] := lblRow3;
RowLabels[3] := lblRow4;
RowLabels[4] := lblRow5;
RowLabels[5] := lblRow6;
RowLabels[6] := lblRow7;
RowLabels[7] := lblRow8;
RowLabels[8] := lblRow9;
RowLabels[9] := lblRow10;
RowLabels[10] := lblRow11;
RowLabels[11] := lblRow12;
ColLabels[0] := lblCol1;
ColLabels[1] := lblCol2;
ColLabels[2] := lblCol3;
ColLabels[3] := lblCol4;
ColLabels[4] := lblCol5;
ColLabels[5] := lblCol6;
ColLabels[6] := lblCol7;
ColLabels[7] := lblCol8;
ColLabels[8] := lblCol9;
ColLabels[9] := lblCol10;
ColLabels[10] := lblCol11;
ColLabels[11] := lblCol12;
end;
function TMyForm.NotZero(AValue: Integer; ValueIfZero: Integer): Integer;
begin
if (AValue = 0) then
Result := ValueIfZero
else
Result := AValue;
end;
procedure TMyForm.Klembord;
var
myDate: TDateTime;
myJaar, myMaand, myDag : Word;
myUur, myMin, mySec, myMilli : Word;
DagTijd: String;
begin
myDate:=Now;
DecodeDateTime(myDate, myJaar, myMaand, myDag,
myUur, myMin, mySec, myMilli);
DagTijd:='Mijn Legging van '+IntToStr(myDag)+ '-' + IntToStr(myMaand)+ '-' +IntToStr(myJaar)+ ' / '
+IntToStr(myUur)+ ':' + IntToStr(myMin)+ ':' + IntToStr(mySec)+chr(10);
Clipboard.AsText:= DagTijd+chr(13)+chr(10)
+kaartcode+chr(13)+chr(10)
+' MagicCard= '+kaartxt[MC];
meKlembord.Clear;
meKlembord.Lines.Add(Clipboard.AsText);
end;
procedure TMyForm.UittellenClick(Sender: TObject);
var
p : TPoint ; // Popup op de juiste plek laten verschijnen -- eig. menu.OwnerDrawn = True !!
begin
P := Uittellen.ClientToScreen(Point(0, Uittellen.Height)); // Point 0 is x,y van Knop
Popupmenu1.Popup(P.X, P.Y);
end;
// ------ Uittellen 2 > 9 krt
procedure TMyForm.N29kaarten1Click(Sender: TObject);
var
inkrt1, inkrt2, inx: integer;
begin
if MessageBox(0,'Hokje 1 + 2 wordt uitgeteld tot 3x3=9 kaarten.'+#13+#13
+'k1 + k2 = kaart 3'+#13
+'k4=k3 -- k5=k2+k3 -- k6=k3+k4'+#13
+'k7=k6 -- k8=k5+k6 -- k9=k7+k8'+#13+#13
+'Alle andere hokjes worden GEWIST!'+#13
,'Uittellen?', MB_YesNo)=mrYes then
begin
inkrt1:=Hokjes[0].Value; // eerste 2 kaarten bewaar in geheugen
inkrt2:=Hokjes[1].Value;
Wissen; // alle hokjes wissen
Hokjes[0].Value:=inkrt1;//Text:=inttostr(inkrt1); // eerste 2 kaarten weer terugplaatsen
Hokjes[1].Value:=inkrt2;//inttostr(inkrt2);
// Rij 1
inx:=(inkrt1+inkrt2) mod MaxW;
if inx=0 then Hokjes[2].Value := NotZero(inx, MaxW);
// Rij 2
Hokjes[12].Text:=Hokjes[2].Text;
inx:=(Hokjes[1].Value+Hokjes[2].Value) mod MaxW;
Hokjes[13].Value := NotZero(inx, MaxW);
inx:=(Hokjes[12].Value+Hokjes[13].Value) mod MaxW;
Hokjes[14].Value := NotZero(inx, MaxW);
// Rij 3
Hokjes[24].Text:=Hokjes[14].Text;
inx:=(Hokjes[13].Value+Hokjes[14].Value) mod MaxW;
Hokjes[25].Value := NotZero(inx, MaxW);
inx:=(Hokjes[25].Value+Hokjes[25].Value) mod MaxW;
Hokjes[26].Value := NotZero(inx, MaxW);
end;
Kaarttel; // Voor MagicCard�
end;
// ------ Uittellen 3 > 10 krt
procedure TMyForm.N310kaarten1Click(Sender: TObject);
var
inkrt1, inkrt2, inkrt3, inx: integer;
begin
if MessageBox(0,'Hokjes 1 + 2 + 3 worden uitgeteld tot 10 kaarten.'+#13+#13
+'k1 + k2 + k3 = kaart 4'+#13
+'k5=k1+k2 -- k6=k2+k3 -- k7=k3+k4'+#13
+'k8=k5+k6 -- k9=k7+k8'+#13
+'k10=k8+k9'+#13+#13
+'Alle andere hokjes worden GEWIST!'+#13
,'Uittellen?', MB_YesNo)=mrYes then
begin
inkrt1:=Hokjes[0].Value;
inkrt2:=Hokjes[1].Value;
inkrt3:=Hokjes[2].Value;
Wissen;
Hokjes[0].Value:=inkrt1;//Text:=inttostr(inkrt1);
Hokjes[1].Value:=inkrt2;//Text:=inttostr(inkrt2);
Hokjes[2].Value:=inkrt3;//Text:=inttostr(inkrt3);
// Rij 1
inx:=(inkrt1+inkrt2+inkrt3) mod MaxW;
Hokjes[3].Value := NotZero(inx, MaxW);
// Rij 2
inx:=(Hokjes[0].Value+Hokjes[1].Value) mod MaxW;
Hokjes[12].Value := NotZero(inx, MaxW);
inx:=(Hokjes[1].Value+Hokjes[2].Value) mod MaxW;
Hokjes[13].Value := NotZero(inx, MaxW);
inx:=(Hokjes[2].Value+Hokjes[3].Value) mod MaxW;
Hokjes[14].Value := NotZero(inx, MaxW);
// Rij 3
inx:=(Hokjes[12].Value+Hokjes[13].Value) mod MaxW;
Hokjes[24].Value := NotZero(inx, MaxW);
inx:=(Hokjes[13].Value+Hokjes[14].Value) mod MaxW;
Hokjes[25].Value := NotZero(inx, MaxW);
// Rij 4
inx:=(Hokjes[24].Value+Hokjes[25].Value) mod MaxW;
Hokjes[36].Value := NotZero(inx, MaxW);
end;
Kaarttel; // Voor MagicCard�
end;
// ------ Uittellen 3 > 16 krt
procedure TMyForm.N3201Click(Sender: TObject);
var
inkrt1, inkrt2, inkrt3, inx: integer;
begin
if MessageBox(0,'Hokjes 1 + 2 + 3 worden uitgeteld tot 16 kaarten.'+#13+#13
+'k1 + k2 + k3 = kaart 4'+#13
+'k5=k1+k2 -- k6=k2+k3 -- k7=k3+k4 -- k8=k5+k6+k7'+#13
+'k9=k5+k6 -- k10=k7+k8 -- k11=k7+k8 -- k12=k9+10+11'+#13
+'k13=k9+k10 -- k14=10+11 -- 15=11+12 -- 16=13+14+15'+#13+#13
+'Alle andere hokjes worden GEWIST!'+#13
,'Uittellen?', MB_YesNo)=mrYes then
begin
inkrt1:=Hokjes[0].Value;
inkrt2:=Hokjes[1].Value;
inkrt3:=Hokjes[2].Value;
Wissen;
Hokjes[0].Value:=inkrt1;//Text:=inttostr(inkrt1);
Hokjes[1].Value:=inkrt2;//Text:=inttostr(inkrt2);
Hokjes[2].Value:=inkrt3;//Text:=inttostr(inkrt3);
// Rij 1
inx:=(inkrt1+inkrt2+inkrt3) mod MaxW;
Hokjes[3].Value := NotZero(inx, MaxW);
// Rij 2
inx:=(Hokjes[0].Value+Hokjes[1].Value) mod MaxW;
Hokjes[12].Value := NotZero(inx, MaxW);
inx:=(Hokjes[1].Value+Hokjes[2].Value) mod MaxW;
Hokjes[13].Value := NotZero(inx, MaxW);
inx:=(Hokjes[2].Value+Hokjes[3].Value) mod MaxW;
Hokjes[14].Value := NotZero(inx, MaxW);
inx:=(Hokjes[12].Value+Hokjes[13].Value+Hokjes[14].Value) mod MaxW;
Hokjes[15].Value := NotZero(inx, MaxW);
// Rij 3
inx:=(Hokjes[12].Value+Hokjes[13].Value) mod MaxW;
Hokjes[24].Value := NotZero(inx, MaxW);
inx:=(Hokjes[13].Value+Hokjes[14].Value) mod MaxW;
Hokjes[25].Value := NotZero(inx, MaxW);
inx:=(Hokjes[14].Value+Hokjes[15].Value) mod MaxW;
Hokjes[26].Value := NotZero(inx, MaxW);
inx:=(Hokjes[24].Value+Hokjes[25].Value+Hokjes[26].Value) mod MaxW;
Hokjes[27].Value := NotZero(inx, MaxW);
// Rij 4
inx:=(Hokjes[24].Value+Hokjes[25].Value) mod MaxW;
Hokjes[36].Value := NotZero(inx, MaxW);
inx:=(Hokjes[25].Value+Hokjes[26].Value) mod MaxW;
Hokjes[37].Value := NotZero(inx, MaxW);
inx:=(Hokjes[26].Value+Hokjes[27].Value) mod MaxW;
Hokjes[38].Value := NotZero(inx, MaxW);
inx:=(Hokjes[36].Value+Hokjes[37].Value+Hokjes[38].Value) mod MaxW;
Hokjes[39].Value := NotZero(inx, MaxW);
end;
Kaarttel; // Voor MagicCard�
end;
// ------ Uittellen 5 > 15 krt
procedure TMyForm.N515kaarten1Click(Sender: TObject);
var
inkrt1, inkrt2, inkrt3, inkrt4, inkrt5, inx: integer;
begin
if MessageBox(0,'Hokjes 1 + 2 + 3 + 4 + 5 worden uitgeteld tot 15 kaarten.'+#13+#13
+'k06=k1+k2 -- k07=k2+k3 -- k08=k3+k4 -- k09=k4+k5'+#13
+'k10=k6+k7 -- k11=k7+k8 -- k12=k8+k9'+#13
+'k13=k10+k11 -- k14=k11+k12'+#13
+'k15=k13+k14'+#13+#13
+'Alle andere hokjes worden GEWIST!'+#13
,'Uittellen?', MB_YesNo)=6 then
begin
inkrt1:=Hokjes[0].Value;
inkrt2:=Hokjes[1].Value;
inkrt3:=Hokjes[2].Value;
inkrt4:=Hokjes[3].Value;
inkrt5:=Hokjes[4].Value;
Wissen;
Hokjes[0].Value:=inkrt1;//Text:=inttostr(inkrt1);
Hokjes[1].Value:=inkrt2;//Text:=inttostr(inkrt2);
Hokjes[2].Value:=inkrt3;//Text:=inttostr(inkrt3);
Hokjes[3].Value:=inkrt4;//Text:=inttostr(inkrt4);
Hokjes[4].Value:=inkrt5;//Text:=inttostr(inkrt5);
//// Rij 1 // Valt weg?
// inx:=(inkrt1+inkrt2+inkrt3+inkrt4+inkrt5) mod MaxW;
// if inx=0 then Hokjes[3].Text:=inttostr(MaxW) else Hokjes[3].Text:=inttostr(inx);
// Rij 2
inx:=(Hokjes[0].Value+Hokjes[1].Value) mod MaxW;
Hokjes[12].Value := NotZero(inx, MaxW);
inx:=(Hokjes[1].Value+Hokjes[2].Value) mod MaxW;
Hokjes[13].Value := NotZero(inx, MaxW);
inx:=(Hokjes[2].Value+Hokjes[3].Value) mod MaxW;
Hokjes[14].Value := NotZero(inx, MaxW);
inx:=(Hokjes[3].Value+Hokjes[4].Value) mod MaxW;
Hokjes[15].Value := NotZero(inx, MaxW);
// Rij 3
inx:=(Hokjes[12].Value+Hokjes[13].Value) mod MaxW;
Hokjes[24].Value := NotZero(inx, MaxW);
inx:=(Hokjes[13].Value+Hokjes[14].Value) mod MaxW;
Hokjes[25].Value := NotZero(inx, MaxW);
inx:=(Hokjes[14].Value+Hokjes[15].Value) mod MaxW;
Hokjes[26].Value := NotZero(inx, MaxW);
// Rij 4
inx:=(Hokjes[24].Value+Hokjes[25].Value) mod MaxW;
Hokjes[36].Value := NotZero(inx, MaxW);
inx:=(Hokjes[25].Value+Hokjes[26].Value) mod MaxW;
Hokjes[37].Value := NotZero(inx, MaxW);
// Rij 5
inx:=(Hokjes[36].Value+Hokjes[37].Value) mod MaxW;
Hokjes[48].Value := NotZero(inx, MaxW);
end;
Kaarttel; // Voor MagicCard
end;
// ------ Vertikaal / Horizontaal - 3x Optellingen kiezen
procedure TMyForm.TelRijenCBClick(Sender: TObject);
begin
If TelRijenCB.Checked then
begin
TelKolommenCB.Checked := False;
TelAllesCB.Checked := False;
Kolommenleeg;
Rijentel;
end
else
Rijenleeg;
end;
procedure TMyForm.TelKolommenCBClick(Sender: TObject);
begin
If TelKolommenCB.Checked then
begin
TelRijenCB.Checked := False;
TelAllesCB.Checked := False;
Rijenleeg;
Kolommentel;
end
else
Kolommenleeg;
end;
procedure TMyForm.TelAllesCBClick(Sender: TObject);
begin
If TelAllesCB.Checked then
begin
TelRijenCB.Checked:= False;
TelKolommenCB.Checked:= False;
Rijentel;
Kolommentel;
end
else
begin
Rijenleeg;
Kolommenleeg;
end;
end;
procedure TMyForm.CreateEditBoxes;
var
Index, ARow, ACol:integer;
const
TabOrderOffset = $1000;
begin
for Index := 0 to NrEdits - 1 do
begin
FHokjes[Index] := TNumEdit.Create(Self);
IndexToRowCol(Index, ARow, ACol);
with FHokjes[Index] do
begin
Top:= 40 + ARow * 22; //trunc(Index/12)*22; // is ? rijen van 12 kaarten >
Left:=40 + ACol * 22; //(Index mod 12)*22; // bij for 0-35 do
Height:=21;
Width:=21;
MaxLength:=2;
Tag := Index; //Nodig in OnEditBoxesKeyDown
TabOrder := TabOrderOffset + Index;
//OnKeyPress := OnEditBoxesKeyPress;
OnChange := OnEditBoxesChange;
OnKeydown:= OnEditBoxesKeydown;
end;
Hokjes[Index].Parent:=Self; //doe dat als laatste
end;
end;
// ------ MAXIMUM Kaarten
procedure TMyForm.MAXDeckChange(Sender: TObject);
var
OldMaxW: Integer;
begin
OldMaxW := MaxW;
if not (TryStrToInt(MaxDeck.Text, MaxW) and (MaxW > 0)) then
begin
MaxW := OldMaxW;
MaxDeck.Text := IntToStr(MaxW);
end;
MyForm.lbMagCard.Caption:='??';
Wissen;
end;
function TMyForm.GetHokjes(AIndex: Integer): TNumEdit;
begin
Result := FHokjes[AIndex];
end;
function TMyForm.GetHokjes(ARow, ACol: Integer): TNumEdit;
var
Index: Integer;
begin
RowColToIndex(ARow, ACol, Index);
Result := GetHokjes(Index);
end;
//function TMyForm.GetHokjesValue(AIndex: Integer): Integer;
//begin
// if not TryStrToInt(Hokjes[AIndex].Text, Result) then
// Result := 0;
//end;
procedure TMyForm.RowColToIndex(const ARow, ACol: Integer; out AIndex: Integer);
begin
AIndex := (ARow * RowCount) + ACol;
end;
procedure TMyForm.IndexToRowCol(const AIndex: Integer; out ARow, ACol: Integer);
begin
ARow := AIndex div RowCount;
ACol := AIndex mod RowCount;
end;
// Uitgetelde waarde zelf in raster voegen om te gebruiken.
procedure TMyForm.CopyCodeClick(Sender: TObject);
begin
Kaarttel;
Klembord;
end;
procedure TMyForm.btWissenClick(Sender: TObject);
begin
Wissen;
// Wat ook kan:
// for i := 0 to (ComponentCount -1) do begin
// if (Component[i] is TEdit) then
// (Component[i] as TEdit).Clear; // of TEdit(Components[i]).Clear;
// If (Components[I] Is TLabel) And (TLabel(Components[I]).Tag = 1) Then
// TLabel(Components[I]).Caption := ''; // voor alleen sommige labels met tag = 1
//// Controls en ControlCount gebruiken voor andere objecten als het niet lukt
// end;
end;
procedure TMyForm.URLlabelClick(Sender: TObject);
begin
{Vergeet niet bij uses: ShellApi toe te voegen}
ShellExecute(Application.Handle,'open','http://www.marieke-esoterie.nl','',nil,SW_NORMAL);
end;
// ------ Help
procedure TMyForm.btHelpClick(Sender: TObject);
begin
Showmessage('Standaard Kaartnummers zijn 1-36. Lege vakjes worden genegeerd.'+#13+
'Rijen / Kolommen kunnen apart of tegelijk worden uitgeteld.'+#13+
'Op dit moment zijn er alleen titels voor de Lenormand kaarten'+#13+
'Getallen hoger dan 36 kunnen wel worden gebruikt.' +#13+
'Uittellen: geeft verschillende keuzes voor een speciale legging.'+#13+
'Met de Entertoets wordt opnieuw de MagicCard berekend.'+#13+#13+
'Kopieer met de Kopieerknop de uitkomst naar het pc-geheugen en'+#13+
'plak de code vervolgens in de doellocatie met de toetsen Ctrl+V.'+#13+
'Toets Esc = Sluiten.'+#13+
'(vs 1.0 26.09.2021)');
end;
// ------ Zet Kleur in hokje en Voer telling uit
procedure TMyForm.OnEditBoxesChange(Sender: TObject);
var
i, Value: integer;
begin
//writeln('OnEditBoxesChange: FSuppressEditBoxesOnChange=',FSuppressEditBoxesOnChange);
if FSuppressEditBoxesOnChange then
Exit; //we zitten in procedure Wissen;
i := (Sender as TEdit).Tag;
//for i := 0 to High(Hokjes) do
//begin
if Hokjes[i].text <> '' then
begin //bevat text
Value := Hokjes[i].Value;
if Value > MaxW then
begin
Hokjes[i].Text := '';
Hokjes[i].Color:=clWindow;
end
else
begin
if Value > 0 then
Hokjes[i].Color:=clYellow
else
Hokjes[i].color:=clMoneyGreen
end
end
else //hokje is leeg
Hokjes[i].Color:=clWindow;
//end;
lbMagCard.Caption:='??';
if TelAllesCB.Checked or TelRijenCB.Checked then
RijenTel;
if TelAllesCB.Checked or TelKolommenCB.Checked then
KolommenTel;
end;
procedure TMyForm.OnEditBoxesKeyDown(Sender: TObject; var Key: Word; shift: TShiftState);
var
Current, ARow, ACol: Integer;
procedure PrevHokje;
begin
if (Current > 0) then
begin
Dec(Current);
Hokjes[Current].SetFocus;
end;
end;
procedure NextHokje;
begin
if (Current < NrEdits - 1) then
begin
Inc(Current);
Hokjes[Current].SetFocus;
end;
end;
procedure NextRow;
begin
if (ARow < RowCount - 1) then
begin
Inc(ARow);
RowColToIndex(ARow, ACol, Current);
Hokjes[Current].SetFocus;
end;
end;
procedure PrevRow;
begin
if (ARow > 0) then
begin
Dec(ARow);
RowColToIndex(ARow, ACol, Current);
Hokjes[Current].SetFocus;
end;
end;
begin
if (Shift <> []) then
Exit;
//Sender moet hier de Edit zijn die focus heeft
Current := (Sender as TEdit).Tag;
IndexToRowCol(Current, ARow, ACol);
Case Key of
VK_Left: PrevHokje;
VK_Right: NextHokje;
VK_UP: PrevRow;
VK_DOWN: NextRow;
end;
end;
procedure TMyForm.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
If Key = VK_ESCAPE then Close; // is event plus prop keypreview moet aan!
If Key = VK_RETURN then CopyCodeClick(Self); // is event plus prop keypreview moet aan!
if (Key=VK_F12) then DoDebugTesting;
end;
procedure TMyForm.FormShow(Sender: TObject);
begin
Hokjes[0].SetFocus;
end;
procedure TMyForm.FormCreate(Sender: TObject);
begin
FSuppressEditBoxesOnChange := False;
CreateEditBoxes;
MaxW:=36;
CreateRowColLabels;
end;
//*********************************************
procedure TMyForm.DoDebugTesting;
var
i: Integer;
begin
for i := 0 to NrEdits - 1 do Hokjes[i].Value := MaxW;
end;
//*********************************************
End.
Bookmarks