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
| //------------------------------------------------------------------------------
procedure TFrmxxx.CreateDateTimePicker;
type
PMaskEditButton = ^TMaskEditButton;
TMaskEditButton = record
MaskEdit: Pointer;
Button: Pointer;
end;
// --- Fonction interne ----------------------------------------------------
procedure GetListEdDateRecursive(ParentControl: TControl; var List: TList);
var
ic: integer;
ButtonName: String;
lpMaskEditButton: PMaskEditButton;
begin
// La liste Controls contient les Objets dépendant visuellement (imbrication) de leur parent
// La liste Components contient les Objets dépendant logiquement (mémoire) de leur propriétaire (Owner)
if ParentControl is TMaskEdit then begin
if Copy(ParentControl.Name, 1, Length('EdDate')) = 'EdDate' then begin
if Assigned(ParentControl.Parent) then begin
ButtonName := 'Btn' + Copy(ParentControl.Name, 3, Length(ParentControl.Name) - 2);
for ic := 0 to TWinControl(ParentControl.Parent).ControlCount - 1 do begin
if TWinControl(ParentControl.Parent).Controls[ic].Name = ButtonName then begin
New(lpMaskEditButton);
lpMaskEditButton^.MaskEdit := TMaskEdit(ParentControl);
lpMaskEditButton^.Button := TButton(TWinControl(ParentControl.Parent).Controls[ic]);
List.Add(lpMaskEditButton);
Break;
end;
end;
end;
end;
Exit;
end;
// "is" renvoie True si ParentControl est un TWinControl ou un Objet d'une Classe dérivée
if ParentControl is TWinControl then begin
for ic := 0 to TWinControl(ParentControl).ControlCount - 1 do begin
GetListEdDateRecursive(TWinControl(ParentControl).Controls[ic], List);
end;
end;
end;
var
ListEdDate: TList;
TmpDateTimePicker: TDateTimePicker;
iled: Integer;
TmpMaskEditButton: TMaskEditButton;
begin
ListEdDate := TList.Create();
try
GetListEdDateRecursive(Self, ListEdDate);
for iled := 0 to ListEdDate.Count - 1 do begin
// Stockage de la Structure dans une Variable Temporaire
TmpMaskEditButton := TMaskEditButton(ListEdDate.Items[iled]^);
// Création du TDateTimePicker
TmpDateTimePicker := TDateTimePicker.Create(Self); // le Owner le détruira !
TmpDateTimePicker.Name := 'Picker' + Copy(TWinControl(TmpMaskEditButton.MaskEdit).Name, 3, Length(TWinControl(TmpMaskEditButton.MaskEdit).Name) - 2);
TmpDateTimePicker.BoundsRect := TWinControl(TmpMaskEditButton.MaskEdit).BoundsRect;
TmpDateTimePicker.Parent := TWinControl(TmpMaskEditButton.MaskEdit).Parent;
TmpDateTimePicker.OnCloseUp := AllDateTimePickerCloseUp;
TmpDateTimePicker.TabStop := False;
TmpDateTimePicker.Visible := True;
TmpDateTimePicker.SendToBack();
// "Suppression" de l'ancien Bouton ...
TWinControl(TmpMaskEditButton.Button).Visible := False;
// Redimensionnement du MaskEdit
TMaskEdit(TmpMaskEditButton.MaskEdit).Left := TMaskEdit(TmpMaskEditButton.MaskEdit).Left + 3;
TMaskEdit(TmpMaskEditButton.MaskEdit).Top := TMaskEdit(TmpMaskEditButton.MaskEdit).Top + 3;
TMaskEdit(TmpMaskEditButton.MaskEdit).Width := TMaskEdit(TmpMaskEditButton.MaskEdit).Width - 6;
TMaskEdit(TmpMaskEditButton.MaskEdit).Height := TMaskEdit(TmpMaskEditButton.MaskEdit).Height - 6;
TMaskEdit(TmpMaskEditButton.MaskEdit).BorderStyle := bsNone;
TMaskEdit(TmpMaskEditButton.MaskEdit).Width := TMaskEdit(TmpMaskEditButton.MaskEdit).Width - GetSystemMetrics(SM_CXVSCROLL);
end;
finally
for iled := ListEdDate.Count - 1 downto 0 do begin
Dispose(ListEdDate.Items[iled]);
end;
ListEdDate.Free();
end;
end; |
Partager