Statistiques
| Révision:

root / LicensesMercure / UFUSB.pas @ 5

Historique | Voir | Annoter | Télécharger (6,683 ko)

1
unit UFUSB;
2

    
3
interface
4

    
5
uses
6
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7
  Dialogs, StdCtrls, Buttons, JvBaseDlg, JvSelectDirectory, ComCtrls;
8

    
9
type
10
  TFUSB = class(TForm)
11
    LAjinomoto: TLabel;
12
    CBAjinomoto: TComboBox;
13
    LCourse: TLabel;
14
    ECourse: TEdit;
15
    LUser: TLabel;
16
    CBUser: TComboBox;
17
    LFormationDate: TLabel;
18
    LFormationPlace: TLabel;
19
    EFormationDate: TEdit;
20
    EFormationPlace: TEdit;
21
    LFirstName: TLabel;
22
    LLastName: TLabel;
23
    LCompany: TLabel;
24
    EFirstName: TEdit;
25
    ELastName: TEdit;
26
    ECompany: TEdit;
27
    GBAjinomoto: TGroupBox;
28
    GBUser: TGroupBox;
29
    JvSelectDirectory: TJvSelectDirectory;
30
    BBNext: TBitBtn;
31
    EDirectory: TEdit;
32
    BBDirectory: TBitBtn;
33
    LFinalDate: TLabel;
34
    DTPFinalDate: TDateTimePicker;
35
    LDirectory: TLabel;
36
    procedure FormCreate(Sender: TObject);
37
    procedure FormShow(Sender: TObject);
38
    procedure CBAjinomotoChange(Sender: TObject);
39
    procedure CBUserChange(Sender: TObject);
40
    procedure BBDirectoryClick(Sender: TObject);
41
    procedure BBNextClick(Sender: TObject);
42
  private
43
    { D?clarations priv?es }
44
  public
45
    { D?clarations publiques }
46
  end;
47

    
48
var
49
  FUSB: TFUSB;
50

    
51
implementation
52

    
53
uses
54
  IniFiles, UFMenu;
55

    
56
{$R *.dfm}
57

    
58
procedure TFUSB.FormCreate(Sender: TObject);
59
begin
60
  Top := 0;
61
  Left := 0;
62
  DTPFinalDate.DateTime := Now;
63
end;
64

    
65
procedure TFUSB.FormShow(Sender: TObject);
66
begin
67
  CBAjinomoto.Clear;
68
  with FMenu.TAjinomoto do
69
  begin
70
    First;
71
    while not Eof do
72
    begin
73
      CBAjinomoto.Items.Insert(0, FieldByName('Key').AsString);
74
      Next;
75
    end;
76
  end;
77
  CBAjinomotoChange(nil);
78
end;
79

    
80
procedure TFUSB.CBAjinomotoChange(Sender: TObject);
81
var
82
  i: Integer;
83
begin
84
  EFormationDate.Clear;
85
  EFormationPlace.Clear;
86
  ECourse.Clear;
87
  CBUser.Clear;
88
  CBUserChange(nil);
89
  if CBAjinomoto.ItemIndex = -1 then Exit;
90
  with FMenu.TAjinomoto do
91
    if Locate('Key', CBAjinomoto.Text, [])
92
    then
93
    begin
94
      EFormationDate.Text := FieldByName('FormationDate').AsString;
95
      EFormationPlace.Text := FieldByName('FormationPlace').AsString;
96
      ECourse.Text := Format('Formation du %s ? %s', [EFormationDate.Text, EFormationPlace.Text]);
97
      for i := 1 to FieldByName('Licenses').AsInteger do
98
        CBUser.Items.Add(Format('%s %s (%s)', [FieldByName(Format('FirstName%d', [i])).AsString, FieldByName(Format('LastName%d', [i])).AsString, FieldByName(Format('Company%d', [i])).AsString]));
99
    end;
100
end;
101

    
102
procedure TFUSB.CBUserChange(Sender: TObject);
103
begin
104
  EFirstName.Clear;
105
  ELastName.Clear;
106
  ECompany.Clear;
107
  BBNext.Enabled := (CBUser.ItemIndex <> -1) and (Length(EDirectory.Text) > 0);
108
  if CBUser.ItemIndex = -1 then Exit;
109
  with FMenu.TAjinomoto do
110
  begin
111
    EFirstName.Text := FieldByName(Format('FirstName%d', [CBUser.ItemIndex + 1])).AsString;
112
    ELastName.Text := FieldByName(Format('LastName%d', [CBUser.ItemIndex + 1])).AsString;
113
    ECompany.Text := FieldByName(Format('Company%d', [CBUser.ItemIndex + 1])).AsString;
114
  end;
115
end;
116

    
117
procedure TFUSB.BBDirectoryClick(Sender: TObject);
118
begin
119
  if JvSelectDirectory.Execute
120
  then
121
    EDirectory.Text := JvSelectDirectory.Directory;
122
  BBNext.Enabled := (CBUser.ItemIndex <> -1) and (Length(EDirectory.Text) > 0);
123
end;
124

    
125
procedure TFUSB.BBNextClick(Sender: TObject);
126
var
127
  Lic : TIniFile;
128
  MajorVersion, MinorVersion, ReleaseVersion, BuildVersion : integer ;
129
  FileName, VersionString, Drive, Volume, SoftwareEnableKey : string ;
130
  Buffer : Pointer ;
131
  Version : PVSFixedFileInfo ;
132
  BufferSize, VersionSize : DWORD ;
133
  VolumeSerialNumber, MaximumComponentLength, FileSystemFlags : DWORD ;
134
begin
135
  if not DirectoryExists(EDirectory.Text)
136
  then
137
  begin
138
    MessageDlg('Le dossier d''installation n''existe pas !' + sLineBreak + 'V?rifier que la cl? USB a bien ?t? ins?r?e.', mtError, [mbOK], 0);;
139
    Exit;
140
  end;
141
  FileName := IncludeTrailingPathDelimiter(JvSelectDirectory.Directory) + 'InraPorc.exe';
142
  if not FileExists(FileName)
143
  then
144
  begin
145
    MessageDlg('Le programme InraPorc.exe ne se trouve pas dans ce dossier !', mtError, [mbOK], 0);
146
    Exit;
147
  end;
148
  // Version du programme
149
  BufferSize := GetFileVersionInfoSize(PChar(FileName), BufferSize);
150
  if BufferSize > 0
151
  then
152
  begin
153
    GetMem(Buffer, BufferSize);
154
    GetFileVersionInfo(PChar(FileName), 0, BufferSize, Buffer);
155
    VerQueryValue(Buffer, '\', Pointer(Version), VersionSize);
156
    MajorVersion := Version.dwFileVersionMS shr 16;
157
    MinorVersion := Version.dwFileVersionMS and $FFFF;
158
    ReleaseVersion := Version.dwFileVersionLS shr 16;
159
    BuildVersion := Version.dwFileVersionLS and $FFFF;
160
    FreeMem(Buffer, BufferSize);
161
    VersionString := Format ('%d.%d.%d.%d', [MajorVersion, MinorVersion, ReleaseVersion, BuildVersion]);
162
  end ;
163
  // Num?ro de s?rie du volume
164
  Drive := IncludeTrailingPathDelimiter(ExtractFileDrive(FileName));
165
  GetVolumeInformation(PChar(Drive), nil, 0, @VolumeSerialNumber, MaximumComponentLength, FileSystemFlags, nil, 0);
166
  Volume := IntToHex(HiWord(VolumeSerialNumber), 4) + '-' + IntToHex(LoWord(VolumeSerialNumber), 4);
167
  // Cl? d'activation
168
  SoftwareEnableKey := FMenu.EducationKey(VersionString, EFirstName.Text, ELastName.Text, ECompany.Text, Volume, DateToStr(DTPFinalDate.Date));
169
  // Enregistrement dans la base
170
  FMenu.MLog.Lines.Add('Recording education...');
171
  with FMenu.TEducation do
172
  begin
173
    Append;
174
    FieldByName('Date').AsDateTime := Now;
175
    FieldByName('Version').AsString := VersionString;
176
    FieldByName('FirstName').AsString := EFirstName.Text;
177
    FieldByName('LastName').AsString := ELastName.Text;
178
    FieldByName('Company').AsString := ECompany.Text;
179
    FieldByName('Course').AsString := ECourse.Text;
180
    FieldByName('VolumeSerialNumber').AsString := Volume;
181
    FieldByName('FinalDate').AsString := DateToStr(DTPFinalDate.Date);
182
    FieldByName('SoftwareEnableKey').AsString := SoftwareEnableKey;
183
    Post;
184
  end;
185
  // Cr?ation du fichier de licence
186
  FMenu.MLog.Lines.Add('Writing license file...');
187
  Lic := TIniFile.Create(ChangeFileExt(FileName, '.lic'));
188
  Lic.WriteInteger('License', 'LicenseType', 1);
189
  Lic.WriteString('License', 'Version', VersionString);
190
  Lic.WriteString('License', 'FirstName', EFirstName.Text);
191
  Lic.WriteString('License', 'LastName', ELastName.Text);
192
  Lic.WriteString('License', 'Company', ECompany.Text);
193
  Lic.WriteString('License', 'Course', ECourse.Text);
194
  Lic.WriteString('License', 'VolumeSerialNumber', Volume);
195
  Lic.WriteString('License', 'FinalDate', DateToStr(DTPFinalDate.Date));
196
  Lic.WriteString('License', 'SoftwareEnableKey', SoftwareEnableKey);
197
  Lic.Free;
198
  CBUser.ItemIndex := -1;
199
  CBUserChange(nil);
200
end;
201

    
202
end.