Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con Toolbar, ToolButtons (https://www.clubdelphi.com/foros/showthread.php?t=52329)

harpo 17-01-2008 15:14:25

Problema con Toolbar, ToolButtons
 
Buenas gente,
estoy teniendo problemas con una Toolbar a la que agrego varios TooButtons con imágenes tomadas de una ImageList.
La idea que tengo es modificar la barra de tareas mostrando unos botones u otros según el frame que aparezca en pantalla. Para ello antes de hacer el cambio de pantalla pongo la propiedad Visible de todos los botones a false y luego, una vez ha cambiado de pantalla, a true los que correspondan.
Pues bien, la Toolbar se va al carajo añadiendo botones que no existen y ocultando otros :eek:. Si tienen que estar los botones 1, 2, 4 y 5, muestra 1, 2, 2, 6, 4 y 5 ¬¬.
Parece una tontería, pero le he dado mil vueltas y no veo modo de resolverlo... a ver si alguien me puede echar una mano.

Oculto los botones así:

Código:

  for i:=0 to ToolBar1.ButtonCount-1 do
  begin
    ToolBar1.Buttons[i].Visible:=false;

Y los muestro así:
Código:

with frMain.frToolBar do
  begin
    boNewPatient.Visible:=true;
    boEditPatient.Visible:=true;
    boDeletePatient.Visible:=true;
    boNewStudy.Visible:=true;
    boEditStudy.Visible:=true;
    boEditStudy.Enabled:=true;
    boDeleteStudy.Visible:=true;
    boDeleteStudy.Enabled:=true;
    boCamera.Visible:=true;
    boPrint.Visible:=true;
    boBack.Visible:=true;   
  end;

Gracias por cualquier ayuda

Lepe 17-01-2008 15:44:32

Si tienes algún separador en el toolbar, también cuenta como un Toolbutton.

Al mostrar, los muestras todos, es decir, con ese código no mostrará el que tu quieras sino todos a la vez.

Por otro lado estás usando "Toolbar1" y "frToolbar" que parecen componentes distintos.

Saludos

harpo 17-01-2008 16:01:59

Cita:

Si tienes algún separador en el toolbar, también cuenta como un Toolbutton.
No tengo ningún separador

Cita:

Al mostrar, los muestras todos, es decir, con ese código no mostrará el que tu quieras sino todos a la vez.
Por? :confused:

Cita:

Por otro lado estás usando "Toolbar1" y "frToolbar" que parecen componentes distintos.
Toolbar1 es el nombre del TToolbar dentro del frame frToolbar. Los botones aparecen como componentes del frame, de ahí el with frMain.frToolbar

Lepe 18-01-2008 01:35:55

Ya que tienes un frame, yo haría esto en tu frame:


Espero no te confunda los nombres que he usado, como ves, he puesto los mismos nombres que tú, pero anteponiendo el prefijo "sb" de ShowButtons

Código Delphi [-]

type TShowButtons = set of (sbNewPatient, sbEditPatient, sbDeletePatient, 
    sbNewStudy, sbEditStudy, sbDeleteStudy, sbCamera, sbPrint, sbBack);

type TfrToolbar = class(TFrame)


private 
  FShowButtons :TShowButtons;
  procedure SetShowButtons(Value:TShowButtons);
public
  property ShowButtons : TShowButtons read FShowButtons write SetShowButtons;
end

Implementation

procedure TfrToolbar.SetShowbuttons(Value:TShowButtons);
begin
    FShowButtons := Value;
    boNewPatient.Visible:= sbNewPatient in Value;
    boDeletePatient.Visible:= sbDeletePatient in Value;
    boNewStudy.Visible:= sbNewStudy in Value;
    boEditStudy.Visible  := sbEditStudy in Value;
    boDeleteStudy.Visible:= sbDeleteStudy in Value;
    boCamera.Visible:= sbCamera in Value;
    boPrint.Visible:= sbPrint in Value;
    boBack.Visible:= sbBack in Value;
end;

Ahora ya no tienes que ocultar los botones antes de cambiar ventana.
Cuando cambies de ventana, si en esa ventana debes mostrar los botones NewPatient, DeletePatient, Print y Back, harías esto:
Código Delphi [-]
with frmMain.frtoolbar do
 ShowButtons := [sbNewPatient, sbDeletePatient, sbPrint, sbBack];
Al asignar la propiedad ShowButtons, dentro del frame se ejecutará el procedimiento SetShowButtons que pondrá visible los botones que hayas especificado. El resto de botones los pondrá invisibles.


Saludos

harpo 28-01-2008 15:24:17

Perfecto así :)
Gracias por tu respuesta y perdón por el retraso en responderte :D


La franja horaria es GMT +2. Ahora son las 09:13:13.

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