Al ejecutar el programa se tiene que ver algo así, un TMemo, que será el elemento del formulario a mostrar y ocultar, y un TBitButton que cambiará la imagen y el texto cada vez que se presione.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
ImageList1: TImageList;
Memo1: TMemo;
procedure BitBtn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FOcultar:Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
FOcultar:=True;
ImageList1.GetBitmap(0,BitBtn1.Glyph);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if FOcultar then
begin
ImageList1.GetBitmap(1,BitBtn1.Glyph);
BitBtn1.Caption:='Mostrar';
Memo1.Visible:=False;
end
else
begin
ImageList1.GetBitmap(0,BitBtn1.Glyph);
BitBtn1.Caption:='Ocultar';
Memo1.Visible:=True;
end;
FOcultar:=not(FOcultar);
end;
end.
En la variable FOcultar almacenamos el estado del botón.
En el evento FormCreate le asignamos el valor True a FOCultar y le asignamos la imagen correspondiente, en este caso la misma es la primera de TImageList que por cierto, también debemos incluir en el Form.
ImageList1.GetBitmap(0,BitBtn1.Glyph);
Para asignar la primera imagen de la lista, utilizamos el procedimiento GetBitmap de TImageList: el primer parámetro corresponde al índice de la imagen, el segundo, a la imagen destino, en este caso
BitBtn1.Glyph.
Porque TBitBtn.Glyph:TBitmap = class(TFPImageBitmap).
El método (procedimiento) GetBitmap pertenece a la clase TCustomImageList:
TCustomImageList.GetBitmap(Index: Integer; Image: TCustomBitmap);
En este ejemplo también cambiamos el texto del botón.
Finalmente cambiamos el valor de FOcultar, sino, no pasa nada.
Si bien es algo sencillo, dejo el código fuente del proyecto: descargar.