Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema de Principiante (https://www.clubdelphi.com/foros/showthread.php?t=82504)

elcharlie 13-03-2013 13:21:16

Problema de Principiante
 
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(sTitulopChardiapCharmespCharanopChar): 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
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsComCtrlsStdCtrls;

type
  TForm_Fecha 
= class(TForm)
    
MonthCalendar1TMonthCalendar;
    
Button1TButton;
    
Button2TButton;
    
procedure FormClose(SenderTObject; var ActionTCloseAction);
    
procedure Button1Click(SenderTObject);
    
procedure Button2Click(SenderTObject);
    
procedure MonthCalendar1DblClick(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
    
Aceptar boolean ;
    
//FechaString : String;
    //Fecha : TDate;
  
end;

var
  
Form_FechaTForm_Fecha;
implementation


{$R *.dfm}





procedure TForm_Fecha.FormClose(SenderTObject; var ActionTCloseAction);
begin
   Action 
:= caFree;
end;
procedure TForm_Fecha.Button1Click(SenderTObject);
begin
  Aceptar 
:= FALSE;
  
Form_Fecha.Close;
end;

procedure TForm_Fecha.Button2Click(SenderTObject);
begin
  Aceptar 
:= TRUE;
  
Form_Fecha.Close;
end;



procedure TForm_Fecha.MonthCalendar1DblClick(SenderTObject);
begin
  Aceptar 
:= TRUE;
  
Form_Fecha.Close;
end;

end


Casimiro Notevi 13-03-2013 13:24:17

Hola, recuerda poner títulos descriptivos a tus preguntas, gracias.
¡A!, y ese código no es php, ¿no? ;)

cloayza 13-03-2013 15:44:26

Te sugiero lo siguiente:

Codigo Libreria (DLL)
Código Delphi [-]
library CalendarioLib;

...
{$R *.res}

function Seleccionar_Fecha(sTitulo: pChar; dia, mes, ano: word): pChar;stdcall;
var
{  FechaStr   : string; 
  Fechain    : TDateTime;
}
  Resultado  : pChar;
  Form_Fecha : TForm_Fecha;
begin
     with TForm_Fecha.Create(nil) Do
     begin
           Caption:=sTitulo;
           MonthCalendar1.Date := EncodeDate(ano,mes,dia);
           try
              Result:=PChar('');
              ShowModal;
              if ModalResult=mrOk then
                 Result:=PChar(StringReplace(DateToStr(MonthCalendar1.Date), ' ','',[rfReplaceAll]));

           finally
                  Free;
           end;
     end;

end;

exports
     Seleccionar_Fecha;

begin
end.

Para llamar a función:
Código Delphi [-]
...
  function Seleccionar_Fecha(sTitulo: pChar; dia, mes, ano: word): pChar;stdcall; external 'CalendarioLib.Dll';

var
  Form_Fecha: Tform_Fecha;

implementation

{$R *.dfm}

procedure Tform_Fecha.Button1Click(Sender: TObject);
var
   dia, mes, ano: word;
   sDate, sTitulo:PChar;
begin
     dia:=15; mes:=6; ano:=2013;

     sTitulo:=PChar('Calendario Cumpleaños');

     sDate:=Seleccionar_Fecha(sTitulo,dia, mes, ano);

     Edit1.Text:=StrPas(sDate);

end;

Saludos cordiales

elcharlie 13-03-2013 16:40:56

Muchas gracias por Responder, lo pruebo y te digo.

elcharlie 13-03-2013 17:02:50

Vale ya esta probado.
Si uso strpas(retorno) me funciona perfectamente. He estado mirando por internet, y todavia no me queda muy claro que es lo que hace, pero lo que me importa es que me funciona. Muchisimas gracias por tu ayuda, de verdad que ya empezaba a desesperarme.
Un saludo.


La franja horaria es GMT +2. Ahora son las 01:51:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi