Lo del botón es sencillo: usa un SpeedButton (paleta Additional) con su propiedad GroupIndx = 1 y su propiedad AllowAllUp = true;
Lo del típico icono con la agujita pinchada será muy típico pero no sé a qué te refieres.
En cuanto a que los de los mensajes de la VCL te sobrepasa en realidad no es tan difícil. Es cuestión de armarse de paciencia y trazar la aplicación a través de la VCL. Para ello, en Project|Options|Compiler seleccionas la opción "Use Debug DCUs".
Lo que yo hice fue poner un punto de ruptura en la línea
FormStyle := fsStayOnTop
y a partir de ahí comencé a trazar el programa con F7. De lo primero que te das cuenta es de que el cambio de estilo provoca una reconstrucción de la ventana, es decir, primero debe destruirse y volverse a crear, así que en un momento dado durante el trazado desaparece la ventana.
Entonces busco si pasa por algún método que pueda redefinir para ahí poner Visible := false de manera que no se muestre en la nueva posición al momento de reconstruirse y la muestre yo mismo hasta que la cambie de lugar.
Desafortunadamente no hay tal método, mejor dicho sí lo hay pero ocurre antes de que cambie la propiedad FormStyle de manera que al poner Visible := true se genera el consabido error de que no se puede esconder una ventana MDIChild.
Entonces sigo trazando hasta ver aparecer de nuevo a la ventana y así me doy cuenta que ocurre justo después de la línea (en el código de la VCL):
Perform(CM_SHOWINGCHANGED, 0, 0);
Entonces es cuando hago el manejador de CM_SHOWINGCHANGED y veo que el inherited no hace gran cosa sino llamar a la función ShowWindow (o SetWindowPos, no recuerdo bien) de la API de Windows así que nada más había que deshabilitarla y ahora sí llamarla nosotros mismos cuando estuvieramos listos.
Te comento esto para que te des una idea de por donde buscar este tipo de cosas en un futuro.
// Saludos
|