vb.net - net - Ocultar el botón de la barra de tareas de un formulario sin usar WS_EX_TOOLWIN
formulario maximizado c# (7)
Necesito ocultar un formulario de Windows desde 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 despellejamiento 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 quisiera, y si se puede implementar en Delphi 2006. También este proyecto es un servidor COM y no tiene MainForm, etc.
Aquí hay una discusión interesante sobre este problema exacto (de una persecución de VB6).
El bit 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 el estilo WS_EX_APPWINDOW (& H40000) o WS_EX_TOOLWINDOW (& H80) 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 estos dos 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 propietario y no crea un botón si la ventana es propiedad ".
Por cierto, usa la función GetWindow API con el indicador GW_OWNER para determinar si una ventana es propiedad.
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 aún están visibles.
Gracias a Stu por ponerme a la respuesta tan rápido. En mi caso, tuve que agregar manualmente el identificador del formulario de propiedad 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;
Resolvió mis problemas en esta área mediante BordersStyle bsDialog / bsToolWindow (pero luego no necesité el mínimo / máximo ...). Pero me pregunto por qué querrías combinar estos atributos. ¿No confundirá al usuario "normal"?
en Delphi XE (2010) esto funciona perfectamente: debes editar la forma 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 "vista de modelado")
después de esto, vaya a unit1.pas, su unidad de formularios principales y el evento "OnShow" de form1 do:
procedure TForm1.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE);
end;
esto ayudará, tuve el mismo problema, busqué toda la red pero sin resolver
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);
Estoy buscando un fragmento de código para integrar un cuadro de texto en la barra de tareas de Windows.
Planeo crear una barra de herramientas que no puedo ''integrar a la barra de tareas.
Gracias por tu ayuda pj