y hoy por último el botón comentario con fecha
Código Delphi
[-]procedure TFXPAF.SBInstertarComentarioFechaClick(Sender: TObject);
var VarScadena: string;
begin
VarScadena := Inputdate('Comentario con fecha', 'Su comentario');
if VarScadena <> '' then
begin
if CambiarEstado=0 then
begin
DsDetalle.DataSet.Insert;
DsDetalle.DataSet.FieldByName('CODIGOARTICULO').value:='COM./FE.';
DsDetalle.DataSet.FieldByName('DESCRIPCIONARTICULO').value:=VarScadena;
desgloceBlanco;
end;
end;
end;
y la función a la que hace llamada
Código Delphi
[-]function Inputdate(const ACaption, APrompt: string; Separadores:Boolean =true): string;
function GetCharSize(Canvas: TCanvas): TPoint;
var
I: Integer;
Buffer: array[0..51] of Char;
begin
for I := 0 to 25 do Buffer[i] := Chr(I + Ord('A'));
for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
Result.X := Result.X div 52;
end;
var
Form: TForm;
Prompt: TLabel;
Combo: TDateTimePicker;
Ed: TEdit;
Labelfec2: TLabel;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: Integer;
R: TRect;
begin
Result := '';
Form := TForm.Create(Application);
with Form do
try
Canvas.Font := Font;
DialogUnits := GetCharSize(Canvas);
BorderStyle := bsDialog;
FormStyle :=fsStayOnTop;
Caption := ACaption;
ClientWidth := MulDiv(195, DialogUnits.X, 4);
Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := APrompt;
Left := MulDiv(8, DialogUnits.X, 4);
Top := MulDiv(8, DialogUnits.Y, 8);
Constraints.MaxWidth := MulDiv(180, DialogUnits.X, 4);
WordWrap := True;
end;
Ed:=TEdit.Create(Form);
with Ed do
begin
Parent := Form;
Left := Prompt.Left;
Top := Prompt.top+Prompt.Height+5;
Width := MulDiv(180, DialogUnits.X, 4);
Text :='';
end;
Labelfec2 := TLabel.Create(Form);
with Labelfec2 do
begin
Parent := Form;
Caption := 'Fecha';
Left := Prompt.Left;
Top := ED.top+ED.Height+5;
WordWrap := True;
end;
Combo := TDateTimePicker.Create(Form);
with Combo do
begin
Parent := Form;
Left := Prompt.Left;
Top := Labelfec2.top+Labelfec2.Height+5;
Width := MulDiv(178, DialogUnits.X, 4);
end;
ButtonTop := combo.top+Combo.Height+10;;
ButtonWidth := MulDiv(50, DialogUnits.X, 4);
ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'OK';
ModalResult := mrOk;
default := True;
SetBounds(MulDiv(Prompt.Left-2, DialogUnits.X, 4), ButtonTop, ButtonWidth,
ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent := Form;
Caption := 'Cancelar';
ModalResult := mrCancel;
Cancel := True;
SetBounds(MulDiv(137, DialogUnits.X, 4), ButtonTop,ButtonWidth, ButtonHeight);
Form.ClientHeight := 140;
end;
if ShowModal = mrOk then
begin
if Separadores then Result:=Ed.Text+' [ '+DateToStr(Combo.Date)+' ]'
else Result:=Ed.Text+' '+DateToStr(Combo.Date);
end;
finally
Form.Free;
end;
end;
Como podéis ver estoy dejando para el final los botones cancelar y confirmar, tanto del detalle como del principal.
Ya va quedando menos, pero sigo diciendo que esta es la parte más complicada.
Lo próximo es meternos con la entrada de artículos, que la haremos por partes, primero meteremos el artículo en si, despues veremos el tema de los lotes y el ADR y por último, los cálculos y los botones de grabación y cancelar en cuanto al detalle.
En cuanto al principal, queda toda la gestión de cálculos, Comisiones, financiado, retenciones, impuestos, etc y sus botones claro.