Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cual es el problema con este codigo? (https://www.clubdelphi.com/foros/showthread.php?t=63792)

THACKER 03-03-2009 07:26:17

Cual es el problema con este codigo?
 
Bueno no puedo ejecutar la aplicasion por que este codigo me da error:

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if synedit1.Modified = true then
begin

  if messagebox(handle, 'Press Y to Exit ? [Y or N]', 'Select...', MB_YESNO)=IDYES then
  messagebox (handle, 'YES', 'YEA', mb_iconinformation);
    end else begin
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
     end;
  end else begin
close;
end;

Aver quien me ayuda :S

Crandel 03-03-2009 07:58:58

Hola THACKER, hay varios errores

1. Hay un end que no cierra ningun begin, por lo que no te va a compilar.
2. En el evento CloseQuery lo unico que debes modificar es el parametro CanClose y no denes llamar de nuevo a Close porque te va a dar error

Asi que el codigo deberia quedar asi:

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified then
    CanClose := MessageBox(handle, 'Press Y to Exit ? [Y or N]', 'Select...', MB_YESNO) = IDYES;
end;

Suerte

THACKER 03-03-2009 08:05:50

Hmmm no me funciona :S
Se queda el No pegado sera que puedes completar el script con el IF para si el usuario selecciona si para guardar los cambios?

Espero respuesta que no quiero raspar ! :'(
Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if synedit1.Modified = true then
begin
CanClose := messagebox(handle, 'Press Y to Exit ? [Y or N]', 'Select...', MB_YESNO)=IDYES;
  messagebox (handle, 'YES', 'YEA', mb_iconinformation);
    end else begin
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
     end;
close;
end;

Crandel 03-03-2009 08:32:33

Por que no explicas cual es la logica que quieres implementar ?

La pregunta es si quiere salir ? si quiere guardar ? son dos preguntas por separado ?

THACKER 03-03-2009 08:35:03

Osea dejame explicarme.

Se trataria algo asi, que el synedit al estar modificado y al tratar de cerrarlo este pregunte si se desean guardar los cambios.
Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if synedit1.Modified = true then
begin
CanClose := messagebox(handle, 'Desea guardar los cambios al script?', 'Selecciona', MB_YESNO)=IDYES;
  messagebox (handle, 'YES', 'YEA', mb_iconinformation);
    end else begin
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
     end;
close;
end;

Y que se ejecute cierto savedialog y que al seleccionar No el mismo se cierre sin guardar cambios.
Pero claro ese script no sirve me da error :S

Crandel 03-03-2009 08:49:51

entonces no debes modificar CanClose, porque la idea es salir siempre, solo saber si desea guardar antes los cambios o no.

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified = true then
  begin
    if messagebox(handle, 'Desea guardar los cambios antes de salir?', 'Selecciona', MB_YESNO)=IDYES then
      messagebox (handle, 'YES', 'YEA', mb_iconinformation);
    else
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
  end;
end;

THACKER 03-03-2009 08:54:39

Muchas gracias [Crandel]!!
uffff ya casi no me da error y es parte de lo que me falta para completar el examen, pero me da este error:

Código:

[ERROR] CHILDWIN.PAS :
' ; ' not allowed before 'else'

En este script:

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified = true then
  begin
    if messagebox(handle, 'Desea guardar los cambios antes de salir?', 'Selecciona', MB_YESNO)=IDYES then
      messagebox (handle, 'YES', 'YEA', mb_iconinformation);
    else
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
  end;
end;

Alguna idea?: :S

duilioisola 03-03-2009 09:15:56

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified = true then
  begin
    if messagebox(handle, 'Desea guardar los cambios antes de salir?', 'Selecciona', MB_YESNO)=IDYES then
      messagebox (handle, 'YES', 'YEA', mb_iconinformation)  {  ;  Sobra este }
    else
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
  end;
end;

THACKER 03-03-2009 09:21:16

Ayuda por favor
 
Por favor espero alguien me ayude es urgente!

no importa cuantas veses lo trate, el sistema no funciona como deberia
veran quisiera esto aver si alguien me logra ayudar y lograr hacerlo funcionar llevo 2 horas en esto ¬¬

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified = true then
  begin
    if messagebox(handle, 'Desea guardar los cambios antes de salir?', 'Selecciona', MB_YESNO)=IDYES then
      messagebox (handle, 'YES', 'YEA', mb_iconinformation);
      MainForm.Close;
    end else begin
      messagebox (handle, 'NO', 'NO', mb_iconinformation);
      MainForm.close;
  end;

Quisiera que pasaran los siguientes casos:
Código Delphi [-]
procedure ....
begin

if objeto.modified = true then
begin
 messagebox "Desea guardar cambios?", Botones: Yes + No
 al presionar yes:
 
 if savedialog.execute...
 si presiona no:
   end else begin
 cierra la ventana mdi
  
 end;

end;

end.

Ayuda por favor no quiero raspar :S

duilioisola 03-03-2009 09:50:12

Código Delphi [-]
procedure TMDIChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if synedit1.Modified = true then
  begin
    if messagebox(handle, 'Desea guardar los cambios antes de salir?', 'Selecciona', MB_YESNO)=IDYES then
    begin {Esta parte se ejecuta si responde SI}
      if (SaveDialog1.Execute) then
      begin
        {Esto no se si se hace así, pero es la idea}
        synedit1.Lines.SaveToFile(SaveDialog1.FileName);
      end;
      CanClose := True;
    end

    else

    begin {Esta parte se ejecuta si responde NO}
      CanClose := True;
    end;
  end;
end;

Ñuño Martínez 03-03-2009 09:59:42

Le faltan "BEGINS" a los "ENDS". No puedes poner un END si no hay un BEGIN antes.

Si no has entendido eso entonces nunca serás capaz de escribir un programa que funcione. Debes repasar la gramática del Pascal.


La franja horaria es GMT +2. Ahora son las 10:59:57.

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