Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cambiar funciones de botones en runtime (https://www.clubdelphi.com/foros/showthread.php?t=83733)

alquimista 22-07-2013 13:59:57

cambiar funciones de botones en runtime
 
Muy buenas...
Tengo unos cuantos botones con sus acciones asociadas.
La idea es poder utilizar los botones a medida con diferentes funciones.
Había pensado usar un listbox con todas las funciones a realizar.
y a la derecha el conjunto de botones...
Y que haciendo el drag and drop desde el listbox al button, éste cambie su caption a la misma que tiene el elemento que arrastro y a su vez se asocie a su accion y guardar esa configuración.
Vamos botones configurables...
Hay algo hecho, algún componente free?
Agradecería ideas o algo de código.

Un saludo.

Neftali [Germán.Estévez] 22-07-2013 14:45:51

La operación en sí, creo que no tiene más dificultad.
Las acciones puedes tenerlas programadas en un TActionList y en ejecución asignar cada una de las TAction a la propiedad del botón que te interese.
Si necesitas que esas asignaciones sean permanentes, deberás guardarlas en algun sitio (Base de Datos, fichero de configuración, registro,...) y restaurarlas cada vez que inicies la aplicación...

El tema de arrastrar sobre el botón puedes programarlo utilizando los eventos para Drag&Drop de los componentes; En el caso de los Speedbutton "a mano" pues no los tienen. O pensar en otra forma de realizar la asignación.

alquimista 22-07-2013 16:32:06

En realidad he pensado que las action me da igual..
Me interesa trasladar el texto del elemento seleccionado en un listbox o treeview y a uno de los muchos botones que tenga. y ponerle al button caption. Luego es el el caption el que usare para ponerlo en un memo o un edit.
Es que no he probado mucho lo del drag and drop.

alquimista 22-07-2013 16:43:32

Bueno ya se lo que me pasaba, pensaba que era automatico y no me salia el drag and drop.
Tenia que poner en el listbox la propiedad Dragmode:=dmautomatic;
y el evento dragover.
Pensaba que era mas dificil.

Código Delphi [-]
procedure TForm11.btn1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
 (Sender as TButton).Caption :=
    (Source as TListBox).Items
    [(Source as TListBox).ItemIndex]
end;

procedure TForm11.btn1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   Accept := True;
end;

alquimista 22-07-2013 17:11:37

Por si sirve a alguien..

Para un listbox o u Treeview;

Código Delphi [-]
procedure TForm11.btn1DragDrop(Sender, Source: TObject; X, Y: Integer);

var a:string;
begin
if Source is TlistBox then

  begin
 (Sender as TButton).Caption :=
    (Source as TListBox).Items[(Source as TListBox).ItemIndex];
  end;
 if Source is TTreeview then
   (Sender as TButton).Caption :=
    (Source as TTreeView).Selected.Text;
end;


La franja horaria es GMT +2. Ahora son las 11:30:53.

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