Pregunta

Necesito ocultar un formulario de Windows de la barra de tareas pero no puedo usar WS_EX_TOOLWINDOW porque necesito el menú del sistema y los botones min / max en la barra de título del formulario.

Si cambio el formulario a una ventana de herramientas en tiempo de ejecución, el diseño del formulario se rellena. Al buscar en la Web, veo que VB tiene una propiedad ShowInTaskbar y me pregunto si esto haría lo que quiero y si se puede implementar en Delphi 2006. Además, este proyecto es un servidor COM y no tiene MainForm, etc.

¿Fue útil?

Solución

Hay una discusión interesante sobre este problema exacto aquí (desde una perspectiva VB6).

La parte más relevante desde la perspectiva de su pregunta es:

  

" Cuando crea una ventana, la barra de tareas   examina el estilo extendido de la ventana   para ver si WS_EX_APPWINDOW   (& amp; H40000) o WS_EX_TOOLWINDOW (& amp; H80)   El estilo está activado. Si WS_EX_APPWINDOW   está activado, la barra de tareas muestra un   botón para la ventana, y si WS_EX_   TOOLWINDOW está activado, la barra de tareas   no muestra un botón para la ventana.   Una ventana nunca debe tener ambas   Estos estilos extendidos. Si la ventana   no tiene ninguno de estos estilos,   la barra de tareas decide crear un botón   si la ventana no es propiedad y no   crear un botón si la ventana es   propiedad. "

     

Por cierto, utiliza el GetWindow   Función API con el indicador GW_OWNER para   determinar si una ventana es propiedad.

Otros consejos

Gracias a Stu por ponerme a la respuesta tan rápido. En mi caso, tuve que agregar manualmente el identificador del formulario propietario en CreateParams, pero eso puede no ser necesario en otros casos / normales.

procedure TfrmWord2Site.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := <your owner form>.Handle;
  Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW;
end;

Gracias a http://www.scalabium.com/faq/dct0096.htm .

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
  SetWindowLong(Application.Handle, GWL_EXSTYLE,
    GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
  ShowWindow(Application.Handle, SW_SHOW);
end;

Lo probé y funcionó con Delphi2006. Y el menú de Windows y los botones min / max siguen siendo visibles.

en Delphi XE (2010) esto funciona perfectamente: deberías editar el formulario principal,

program prog;  

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

begin
Application.Initialize;

// this value is set to "true", but you shoud set it "false"
Application.MainFormOnTaskbar := false;

Application.CreateForm(TForm1, Form1);
Application.Run;
end.

(para esta búsqueda de formulario principal en la ventana de "vista de modelado")

después de esto, vaya a unit1.pas, su unidad de formularios principal y "OnShow" evento de form1 do:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

esto ayudará, tuve el mismo problema, busqué en toda la red pero sin resolver

Resolvió mis problemas en esta área con BordersStyle bsDialog / bsToolWindow (pero luego no necesitaba el min / max ...). Pero me pregunto por qué debería combinar estos atributos. ¿No confundirá al usuario "normal"?

Estoy buscando un fragmento de código para integrar un cuadro de texto a la barra de tareas de Windows.

Planeo crear una barra de herramientas que no puedo 'integrar en la barra de tareas.

Gracias por tu ayuda pj

Una forma de hacer esto en C # es:

ShowWindow(_window, SWHide);

int style = GetWindowLong(_window, GWL_EXSTYLE);
style |= WS_EX_TOOLWINDOW;
SetWindowLong(_window, GWL_EXSTYLE, style);

ShowWindow(_window, SWShow);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top