[Lazarus-es] Aspecto de controles deshabilitados

Gastón Dall' Oglio gaston.dalloglio en gmail.com
Mar Oct 25 21:24:22 CEST 2011


Jose, la forma que vos decís es la única que funciona del todo bien :) Hay
que utilizar los OnUpdate con el FHabilitado (en mi caso) y listo. Por
ejemplo:

procedure TfmListado.acReporteUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := FHabilitado and (dsListado.DataSet.State =
dsBrowse);
end;



Con esta forma que yo estaba usando, no logro que los TToolButtons se
muestren deshabilitados

if FHabilitado then
  alListado.State := asNormal                          // alListado es un
TctionList
else
alListado.State := asSuspended;

, y al modificarlos así directamente

for i := 0 to tbListado.ControlCount - 1 do
  tbListado.Controls[i].Enabled := FHabilitado;              // tbListado es
el toolbar que usa los TAction

luego no reflejan el verdadero estado del TAction hasta el nuevo OnUpdate.


Al final el método SetHabilitado de TFrame quedó así:


procedure TfmListado.SetHabilitado(AValue: Boolean);
var
   i: Integer;
begin
   if FHabilitado=AValue then Exit;
   FHabilitado:=AValue;

   Enabled := FHabilitado;

   if FHabilitado then begin
       dgListado.TitleFont.Color := clDefault;
       dgListado.Font.Color:= clDefault
   end else begin
       dgListado.TitleFont.Color := clInactiveCaption;
       dgListado.Font.Color:= clInactiveCaption;
   end;

    tbListado.Enabled := FHabilitado;
    dgListado.Enabled := FHabilitado;
    sgListado.Enabled := FHabilitado;
end;


Bueno, era bastante sencillo después de todo, solo hay que sabe que hacer en
cada caso. Gracias.



2011/10/25 Gastón Dall' Oglio <gaston.dalloglio en gmail.com>

> Antonio
>
> 2011/10/25 Jose Antonio Cuello Principal <jcuello en artextrading.com>
>
>>  Pues solo tienes que cambiar el estado del boton no del tactionlist. En
>> evento OnUpdate (que puede ser el mismo para todos los TActions)
>>
>
> Tengo entendido que deshabilitando el TActionList deshabilito todas las
> acciones, evitando así que se continúen chequeando innecesariamente los
> OnUpdate de cada accción.
>
>
>>
>> (Sender as TAction).Enabled := FEnabled;
>>
>
> En un principio usaba esta forma y funciona, pero me decidí por
> deshabilitar el TActionList porque es mas centralizada, tengo un TActionList
> por cada frame ¿Hay algún problema con deshabilitar este control con
> asSuspended? Tampoco se la diferencia entre asSuspended
> y asSuspendedEnabled.
>
> Saludos.
>
>
>>
>> Un saludo
>>
>> El 25/10/11 13:42, Gastón Dall' Oglio escribió:
>>
>> Hola Jose.
>>
>>  Todos los botones del toolbar utilizan un TAction. Cuando quiero
>> deshabilitar todos los TAction deshabilito el TActionList así:
>>
>>  if FHabilitado then
>>     alListado.State := asNormal // alListado es un TActionList
>> else
>>     alListado.State := asSuspended;
>>
>>  Eso funciona, el problema es el aspecto de los  botones.
>>
>>  Saludos!
>>
>> 2011/10/25 Jose Antonio Cuello Principal <jcuello en artextrading.com>
>>
>>>  Por qué no usas TActions. Simplemente le indicas a todos los TActions en
>>> el evento OnUpdate que se pongan Enabled según el Enabled del parent.
>>>
>>> Un saludo.
>>>
>>>
>>> El 24/10/11 19:31, Gastón Dall' Oglio escribió:
>>>
>>>  Hola gente.
>>>
>>>  Les quería consultar por si algunos me puede dar una idea de que hacer,
>>> o si me estoy olvidando algo en el apuro.
>>>
>>>  El tema es que tengo dos frames en un form, y en algún momento necesito
>>> "bloquear" el primero ya que contiene varios controles de datos de
>>> diferentes datasets, toolbars con acciones, etc., y no quiero que el usuario
>>> los pueda utilizar. Para esto lo que hago es deshabilitar el frame y por
>>> consiguiente todos sus controles son deshabilitados. El problema es que para
>>> el usuario estos controles siguen mostrándose cono si él los pudiera usar.
>>> Entonces, la pregunta es ¿como puedo hacer para que tengan un aspecto de
>>> deshabilitados?
>>>
>>>  Como no pude lograrlo, intenté tapar los controles del frame mostrardo
>>> otro sobre estos, como un panel, o una imagen con trasparencia, incluso
>>> probé otros controles. El panel funciona perfectamente, pero sería bueno que
>>> el usuario pudiera seguir viendo que hay dentro del frame deshabilitado. Con
>>> la imagen no logré hacer que se posicione por sobre los demás controles del
>>> frame.
>>>
>>>  ¿algunas idea?
>>>
>>>  gracias de antemano.
>>>
>>>
>>>   _______________________________________________
>>> Lazarus-es mailing listLazarus-es en lists.lazarus.freepascal.orghttp://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>>
>>>
>>> --
>>> *ARTEX TRADING sa*
>>> *José Ant. Cuello Principal*
>>>
>>> _______________________________________________
>>> Lazarus-es mailing list
>>> Lazarus-es en lists.lazarus.freepascal.org
>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>>
>>>
>>
>>
>> _______________________________________________
>> Lazarus-es mailing listLazarus-es en lists.lazarus.freepascal.orghttp://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>>
>> --
>> *ARTEX TRADING sa*
>> *José Ant. Cuello Principal*
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>>
>>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20111025/04bfd426/attachment-0002.html>


More information about the Lazarus-es mailing list