سؤال

أريد أن إخفاء نموذج Windows من شريط المهام ولكن لا أستطيع استخدام WS_EX_TOOLWINDOW لأنني في حاجة إلى نظام القائمة و مين/ماكس أزرار على شكل شريط العنوان.

إن تبديل النموذج إلى أداة نافذة في وقت شكل السلخ هو محشوة.من البحث على شبكة الإنترنت أرى أن VB ShowInTaskbar الملكية و أنا أتساءل إذا كان هذا من شأنه أن أفعل ما أريد ، وما إذا كان يمكن تنفيذها في دلفي 2006.أيضا هذا المشروع هو ملقم COM و لا MainForm ، إلخ.

هل كانت مفيدة؟

المحلول

هناك مناقشة مثيرة للاهتمام من هذه المشكلة بالضبط هنا (من VB6 persepective).

أهم قليلا من سؤالك منظور هو:

"عند إنشاء نافذة شريط المهام يدرس النافذة تمديد نمط لمعرفة ما إذا إما WS_EX_APPWINDOW (&H40000) أو WS_EX_TOOLWINDOW (&H80) نمط التشغيل.إذا WS_EX_APPWINDOW تشغيل شريط المهام يظهر زر النافذة ، وإذا WS_EX_ TOOLWINDOW تشغيل شريط المهام لا تظهر زر النافذة.نافذة ينبغي أبدا أن يكون كل من تمديد هذه الأساليب.إذا كانت النافذة لا تملك أي من هذه الأساليب ، شريط المهام تقرر إنشاء زر إذا كان الإطار هو مفلس و لا إنشاء زر إذا كان الإطار المملوكة".

بالمناسبة يمكنك استخدام GetWindow وظيفة API مع GW_OWNER العلم تحديد ما إذا كانت نافذة تملكها.

نصائح أخرى

وبفضل ستو لوضع لي على الإجابة بسرعة. في حالتي كان لي أن أضيف مقبض على شكل امتلاك يدويا في CreateParams، ولكن هذا قد لا يكون من الضروري في حالات أخرى / العادية.

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;

مع الشكر 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;

أنا جربت وعملت مع Delphi2006.ويندوز القائمة و مين/ماكس أزرار لا تزال مرئية.

وفي دلفي XE (2010) وهذا يعمل تماما: كنت فهذه تعديل النموذج الرئيسي،

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.

و(لهذا نموذج البحث الرئيسي في "النمذجة عرض" نافذة)

وبعد ذلك، انتقل إلى unit1.pas، حدتك الأشكال الرئيسية والحدث "OnShow" من Form1 تفعل:

procedure TForm1.FormShow(Sender: TObject);

begin

ShowWindow(Application.Handle, SW_HIDE);

end;

وهذا سوف يساعد، كان لي نفس المشكلة، بحثت شبكة كاملة ولكن من دون resolt

وحلها مشاكلي في هذا المجال BordersStyle bsDialog / bsToolWindow (ولكن بعد ذلك لم أكن في حاجة للدقيقة / ماكس ...). لكنني أتساءل لماذا يجب عليك أن ترغب في الجمع بين هذه الصفات .. لن أنها تخلط بين المستخدم العادي؟

وأنا أبحث قطعة من التعليمات البرمجية لدمج نص إلى شريط مهام Windows.

وأخطط لإنشاء شريط أدوات لا أستطيع أن 'دمجه في شريط المهام.

وشكرا لمساعدتكم PJ

واحد طريقة للقيام بذلك في C # هي:

ShowWindow(_window, SWHide);

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

ShowWindow(_window, SWShow);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top