Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Post Cambiar caption a los botones de OpenDialog1

Hola amigos tengo un OpenDialog1 que lo utilizo en dependencia la acción a realizar tanto para guardar un archivo como para abrirlo, lo cierto es que no se como podría cambiarle el caption de los botones en dependencia al uso que le valla a dar.


Mil grasias de antemano,
Salu2
Reply With Quote
  #2  
Old 01/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ledian_Fdez.

Código Delphi [-]
...
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TForm1.btnAbrirClick(Sender: TObject);
begin
  OpenDialog1.Tag:= 1;
  if OpenDialog1.Execute then
  ...
end;

procedure TForm1.btnGuardarClick(Sender: TObject);
begin
  OpenDialog1.Tag:= 2;
  if OpenDialog1.Execute then
  ...
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 01/09/2011 at 19:07.
Reply With Quote
  #3  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Post Como cambiar el Caption del boton y saber cual ha sido pulsado

Hola amigos estoy haciendo este procedimiento para Salvar y/o Restaurar la base de datos.

Tengo 2 interrogantes.

La 1ra: ¿Cómo sustituir el caption del boton Abrir por Guardar del OpendDialog?
La 2da: Como saber cuando me cierran el OpendDialog por el boton Cancelar.

Código Delphi [-]
type TAccion = (Salva, Restaura);

procedure GestionBD(Accion:TAccion);

{
.
.
.
}
procedure GestionBD(Accion:TAccion);
var
 OpenDialog: TOpenDialog;
 Query: TADOQuery;
 SQL, MSG: String;
begin
 try
   OpenDialog := TOpenDialog.Create(nil);
   OpenDialog.FileName := '';
   OpenDialog.DefaultExt := '.slv';
   OpenDialog.Filter := 'Fichero Salva(*.slv)|*.slv';
   OpenDialog.FilterIndex := 1;
   OpenDialog.Initialdir := ExtractFilePath(application.ExeName) ;

   Query := TADOQuery.Create(nil);
   Query.ConnectionString := 'Provider=SQLOLEDB.1;Workstation ID=LEDIAN;User ID=sa;Password=pass';
   Query.SQL.Clear;

   case Accion of
    Salva:    begin
               SQL := 'Backup database DB to disk = :File';
               OpenDialog.Title := 'Guardar Salva.';
               MSG := 'La Salva se realizó satisfactoriamente';
         // Aqui debe ir el código para sustituir el caption del boton Abrir por Guardar ¿Cómo hacerlo? no se.
              end;
    Restaura: begin
               SQL := 'Restore database DB from disk = :File';
               OpenDialog.Title := 'Selecionar Salva para la Restaura.';
               MSG := 'La Restaura se realizó satisfactoriamente';
              end;
   end;

   OpenDialog.Execute;

   if (not(FileExists(OpenDialog.FileName)) and (Accion = Restaura)) then
     begin
      Application.MessageBox('No se encuentra el archivo de Salva','Error al Restaurar', MB_ICONERROR);
      Abort;
     end;
    try
     Query.SQL.Add(SQL);
     Query.Parameters.ParamByName('File').Value := OpenDialog.FileName;
     Query.ExecSQL;
     Application.MessageBox(PChar(MSG),'Información', MB_ICONINFORMATION);
    except
     Application.MessageBox('No se pudo realizar la Operación.','Error', MB_ICONERROR);
    end;
 finally
  OpenDialog.Free;
  Query.Free;
 end;
end;

Mil grasias de antemano.

Last edited by Ledian_Fdez : 01/09/2011 at 19:16.
Reply With Quote
  #4  
Old 01/09/2011
Chris's Avatar
[Chris] Chris is offline
Miembro Premium
 
Join Date: Apr 2007
Location: Jinotepe, Nicaragua
Posts: 1,678
Poder: 21
Chris Va por buen camino
Tu primera interrogante ecfisa ya magistralmente te la contestó. Con respecto a la segunda, la línea "OpenDialog.Execute;" devolverá False si el usuario presionó el botón "Cancelar" o simplemente cerró la ventana con el botón "X" en la parte superior derecha. Por ejemplo:

Código Delphi [-]
    { .. código anterior .. }
    if not OpenDialog.Execute then // el usuario canceló
        exit;

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Reply With Quote
  #5  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Post

Muchas grasias Chris por tu ayuda, lo hice como me dijo y no hubo problema. En cuanto al codigo de ecfisa:


Código Delphi [-]
procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(OpenDialog1.Handle), IDOK, PChar ('&Guardarlo'));
end;

No tengo el evento OnShow. lo puse en la linea que habia comentado en mi procedimiento y no hace nada. Sigue saliendo el boton con el texto de Abrir.

Código Delphi [-]
case Accion of
    Salva:    begin
               SQL := 'Backup database DB to disk = :File';
               OpenDialog.Title := 'Guardar Salva.';
               MSG := 'La Salva se realizó satisfactoriamente';
               SetDlgItemText(GetParent(OpenDialog.Handle), IDOK, PChar ('&Guardar'));
              end;

En espera de su respuesta,
Muchas grasias por su ayuda .

Last edited by Ledian_Fdez : 01/09/2011 at 19:50.
Reply With Quote
  #6  
Old 01/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ledian_Fdez.
Quote:
No tengo el evento OnShow.
El evento pertenece al componente TOpenDialog, teniéndolo seleccionado, buscalo en la pestaña Events del Object Inspector.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #7  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Post

Hola ecfisa

Quote:
El evento pertenece al componente TOpenDialog, teniéndolo seleccionado, buscalo en la pestaña Events del Object Inspector.
Es que yo no inserte el componente, yo lo cree de esta forma
Código Delphi [-]
OpenDialog := TOpenDialog.Create(nil);

No se como acceder a sus Eventos.

En espera de su ayuda ...

Last edited by Ledian_Fdez : 01/09/2011 at 20:20.
Reply With Quote
  #8  
Old 01/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Código Delphi [-]
...
type
  TForm1 = class(TForm)
    btAbrir: TButton;
    procedure btAbrirClick(Sender: TObject);
  private
    procedure OpenDialogShow(Sender: TObject);
  public
  end;
...
implementation

procedure TForm1.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TForm1.btAbrirClick(Sender: TObject);
begin
  with TOpenDialog.Create(nil) do
  try
    OnShow:= OpenDialogShow;  // <- Aqui se asigna el evento
    Tag:= 1;
    if Execute then
    ...
  finally
    Free;
  end;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #9  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Me da el siguiente error:

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Reply With Quote
  #10  
Old 01/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Quote:
Originally Posted by Ledian_Fdez View Post
Me da el siguiente error:

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Poné el código que estás utilizando y vemos donde estás cometiendo el error.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #11  
Old 01/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Código Delphi [-]
procedure OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;
//------------------------------------------------------------------------------

procedure GestionBD(Accion:TAccion);
var
 OpenDialog: TOpenDialog;
 Query: TADOQuery;
 SQL, MSG: String;
begin
 try
//   OpenDialog := TOpenDialog.Create(nil);
   with TOpenDialog.Create(nil) do
    begin
    OnShow:= OpenDialogShow;  // <- Aqui se asigna el evento
    Tag:= 1;
{...}

[Error] Glabal.pas(71): Incompatible types: 'method pointer and regular procedure'
Reply With Quote
  #12  
Old 01/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Fijate que el ejemplo que te puse más arriba dice:
Código Delphi [-]
type
  TForm1 = class(TForm)
    btAbrir: TButton;
    procedure btAbrirClick(Sender: TObject);
  private
    procedure OpenDialogShow(Sender: TObject);
  public
  end;
Donde se vé claramente que el procedimiento OpenDialogShow es un método de la clase TForm1.

En el código que pusiste, OpenDialogShow está declarado como un procedimiento regular y eso es lo que te marca el error.

La declaración de la cabecera del procedimiento debería ser:
Código Delphi [-]
procedure TNombre_de_tu_form.OpenDialogShow(Sender: TObject);

Te adjunto una muestra probada y funcionando para que puedas ver con tranquilidad como implementarlo.

Un saludo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 12/09/2011 at 20:53.
Reply With Quote
  #13  
Old 02/09/2011
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Join Date: Jun 2006
Location: Ciudad Habana, Cuba
Posts: 242
Poder: 21
Ledian_Fdez Va por buen camino
Post

Es que estoy implementado ese procedimiento en una Unit Global, no es un formulario, es una Unit donde tengo almacenado varias funciones y procedimiento generales, para luego usuarlas en cualquier proyecto.

Código Delphi [-]
unit Global;

interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Menus, ExtCtrls, DB, ADODB, DateUtils;

type TAccion = (Salva, Restaura);

procedure GestionBD(Accion:TAccion);
procedure OpenDialogShow(Sender: TObject);

Luego agrego la unit al Uses de donde lo valla usar y llamo al procedimiento y/o funciones.

Código Delphi [-]
GestionBD(Salva);

Dentro de GestionBD es donde creo el OpenDialog, le cambio sus propiedades y es donde quisiera cambiarle en dependencia de la Accion el texto del boton:

Si es Salva, cambiar el texto del boton a guardar.
Si es Restaura, cambiar el texto del boton a abrir.

No se si me hice entender.

Salu2
Ledian.
Reply With Quote
  #14  
Old 02/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Creo que la cosa pasa por implementar tus rutinas como métodos de una clase.

Basándome en el código que pusiste, sería algo como:
Código Delphi [-]
unit uRutGlobal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, Menus, ExtCtrls, DateUtils;

type
  TAccion = (Salva, Restaura);
  TRutinasGlobales = class(TObject)
  private
    procedure OpenDialogShow(Sender: TObject);
    ...
  public
    ...
    procedure GestionDB(Accion: TAccion);
  end;

var
  RutGlob: TRutinasGlobales;

implementation

procedure TRutinasGlobales.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

procedure TRutinasGlobales.GestionDB(Accion: TAccion);
begin
  with TOpenDialog.Create(nil) do
  try
    OnShow:= OpenDialogShow;
    Tag:= Integer(Accion);
    if Execute then

  finally
    Free;
  end;
end;
...

Y como ejemplo de llamada:
Código Delphi [-]
....
uses uRutGlobal;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RutGlob.GestionDB(Salva);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #15  
Old 02/09/2011
escafandra's Avatar
[escafandra] escafandra is offline
Miembro Premium
 
Join Date: Nov 2007
Posts: 2,211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
También podría hacerlo como lo hace pero llamando a la función desde el evento OnShow:

Código Delphi [-]
procedure OpenDialogShow(var Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;


procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
  OpenDialogShow(Sender);
end;


Y mantiene su filosofía de unidades de código...

Saludos.
Reply With Quote
  #16  
Old 02/09/2011
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Quote:
También podría hacerlo como lo hace pero llamando a la función desde el evento OnShow
Si, esa también es una opción válida.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 02/09/2011 at 15:04.
Reply With Quote
  #17  
Old 03/09/2011
ariefez's Avatar
ariefez ariefez is offline
Miembro
 
Join Date: Sep 2005
Location: Perú - Lima
Posts: 63
Poder: 21
ariefez Va por buen camino
También puedes implementar una rutina de clase

Código Delphi [-]
...

  // Rutinas de la unidad global

  Rutinas = class

  public

    class procedure OpenDialogShow(var Sender: TObject);

  end;

...


class procedure Rutinas.OpenDialogShow(Sender: TObject);
begin
  if TOpenDialog(Sender).Tag = 1 then
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar('&Abrirlo'))
  else
    SetDlgItemText(GetParent(TOpenDialog(Sender).Handle), IDOK, PChar ('&Guardarlo'));
end;

// Asigna el evento al componente TOpenDialog

...

  with TOpenDialog.Create(nil) do
  try
    OnShow:= Rutinas.OpenDialogShow;
    Tag:= Integer(Accion);
    if Execute then
      ...
  finally
    Free;
  end;

...
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cambiar el color al caption de la form mefixxto OOP 5 09/04/2009 18:28
Cambiar Caption de Cualquier Objeto rjtostado Varios 3 15/10/2008 18:01
Cambiar caption componentes capo979 Varios 2 22/07/2008 09:04
Cambiar Caption Caral Varios 13 08/02/2008 14:22
Cambiar Caption Ayuda...!!! alexis19 Varios 3 26/01/2008 14:25


All times are GMT +2. The time now is 01:52.


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