Hola!
Abro este hilo, para ver si alguna alma caritativa me puede echar una mano. Soy novato en esto de programar en Delphi, aunque he usado otros lenguajes, y a primera vista me resulta interesante.
El problema en cuestion, es que, estoy haciendo una dll, para usar en otro lenguaje. Todo me iba bastante bien, hasta que he metido una funcion que devuelve en pchar una fecha seleccionada en un MonthCalendar.
Aparentemente funciona bien, pero la primera vez que se llama a la función no me devuleve toda la fecha y me la trunca con el ascci 24(Cancelar), me Explico; si tiene que devolver 13/03/2013, me devuelve 13/03/20(Ascci(24) que es la flecha arriba). Os dejo el codigo para que me digais, lo raro es que solo me pasa la primera vez que llamo la funcion, luego va bien.
Gracias de antemano.
Codigo dll:
Código PHP:
function Seleccionar_Fecha(sTitulo: pChar; dia: pChar; mes: pChar; ano: pChar): pChar;stdcall;
var
fechaStr : string;
fechain : TDateTime;
resultado : pChar;
begin
fechaStr:=dia+'/'+mes+'/'+ano;
fechain := StrToDate(fechaStr);
Form_Fecha :=nil;
Form_Fecha := TForm_Fecha.Create(nil);
if Form_Fecha <> nil then
with Form_Fecha do
begin
Form_Fecha.Caption:=sTitulo;
Form_Fecha.Aceptar:=FALSE;
Form_Fecha.MonthCalendar1.Date := fechain;
try
Form_Fecha.ShowModal;
if Form_Fecha.Aceptar = TRUE then
begin
result:=PChar(StringReplace(DateToStr(Form_Fecha.MonthCalendar1.Date), ' ','',[rfReplaceAll]));
end
else
begin
result:=PChar('');
end;
finally
Form_Fecha.Free;
end;
end;
end
end;
y este del formulario que usa:
Código PHP:
unit SeleccionarFecha;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm_Fecha = class(TForm)
MonthCalendar1: TMonthCalendar;
Button1: TButton;
Button2: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure MonthCalendar1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Aceptar : boolean ;
//FechaString : String;
//Fecha : TDate;
end;
var
Form_Fecha: TForm_Fecha;
implementation
{$R *.dfm}
procedure TForm_Fecha.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm_Fecha.Button1Click(Sender: TObject);
begin
Aceptar := FALSE;
Form_Fecha.Close;
end;
procedure TForm_Fecha.Button2Click(Sender: TObject);
begin
Aceptar := TRUE;
Form_Fecha.Close;
end;
procedure TForm_Fecha.MonthCalendar1DblClick(Sender: TObject);
begin
Aceptar := TRUE;
Form_Fecha.Close;
end;
end.