delphi - डेल्फी मानक पुष्टिकरण संवाद का उपयोग कैसे करें लेकिन चेकबॉक्स के साथ "मुझसे फिर से मत पूछो"?




dialog delphi-xe3 (2)

आप हमारे ओपन सोर्स सीनटास्क डायलॉग यूनिट का उपयोग कर सकते हैं।

विंडोज विस्टा / सेवन के मुकाबले एक सामान्य कार्य संवाद उपलब्ध है। लेकिन विंडोज के पिछले संस्करणों के साथ कोई भी उपलब्ध नहीं है, यानी विंडोज एक्सपी या 2 के।

यह इकाई (एक एमपीएल / जीपीएल / एलजीपीएल तिवारी-लाइसेंस के तहत लाइसेंस प्राप्त है) विस्टा / सेवन के तहत नया टास्कडीलाओग एपीआई का उपयोग करेगा, और इसे शुद्ध डेल्फी कोड और मानक थीम वाला वीसीएल घटकों को एक्सपी या 2 के तहत अनुकरण करेगा। यह डेल्फी 6 को एक्सई 4 तक का समर्थन करता है, और Win32 / Win64 यूनिकोड तैयार है।

यहां एक विंडोज सात 64 बिट कंप्यूटर के तहत परिणाम दिया गया है:

और यहां एक समान संवाद है जो हमारे एम्यूलेटेड शुद्ध डेल्फी कोड से बनाया गया है:

चूंकि इस स्क्रीनशॉट को Win 7 मशीन पर बनाया गया था, स्टाइल उस ओएस के लिए मूल है। जब संवाद का एमुलेटेड संस्करण एक्सपी पर चलाता है तो यह उस ओएस के मूल रूप में प्रदर्शित होता है।

आपके पास "अगली बार इस सेटिंग के लिए मत पूछो" चेकबॉक्स ... और संभावित रूप से बहुत अधिक है!

कई पुष्टिकरण संवादों में ऐसा विकल्प है (पुष्टि को अक्षम करने के लिए त्वरित तरीका) के लिए उपयोगी है लेकिन मुझे यह नहीं पता कि यह कैसे करना है। मैं इसे खुद डिजाइन नहीं करना चाहता क्योंकि मुझे यह डायलॉग मानक की तरह होना चाहिए और डेल्फी के हर अपडेट के साथ नए सिरे से डिज़ाइन न करें। ऐसे चेकबॉक्स के साथ डेल्फी मानक पुष्टिकरण संवाद का उपयोग करने का कोई आसान तरीका है?

UPDATE2। सुझाए गए SynTaskDialog पुस्तकालय, सिंोपशे प्रोजेक्ट को बहुत अच्छा काम करता है (मुझे सभी की ज़रूरत है और इससे भी ज्यादा), मैं इसे अपनी परियोजनाओं में उपयोग करूँगा। धन्यवाद!

अद्यतन करें। इसलिए, विचारों के लिए आप लोगों को धन्यवाद। सिस्टम फ़ंक्शन संदेशबॉक्सेक अच्छा समाधान है, लेकिन ऐसा होना चाहिए जितना तेज़ होना चाहिए। सामान्य तौर पर मैं सहमत हूं कि आधुनिक ओएस के बेहतरीन यूआई अनुभव वाले उपयोगकर्ताओं को पुरानी प्रणालियों के लिए पुराने एपीआई फ़ंक्शंस का उपयोग करना और पुरानी प्रणालियों के लिए पुराने जमाने के डिजाइन का उपयोग करना अच्छा विचार है। फिलहाल मैं सरल समाधान (कोड निम्नलिखित है) पर रहता हूं, लेकिन अगर कोई आधुनिक ओएस के लिए यूआई के समर्थन के साथ कोड साझा करता है, तो यह अच्छा होगा।

function MsgDlgWithCB(const Msg,Title,CBMsg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn;
  var cbDontAskAnymore: TCheckBox): TForm;
var
  i: integer;
  b: TButton;
  y: integer;
begin
  Result := CreateMessageDialog(Msg, DlgType, Buttons, DefaultButton) ;
  Result.Position := poScreenCenter;
  cbDontAskAnymore := TCheckBox.Create(Result);
  cbDontAskAnymore.Caption := CBMsg;
  cbDontAskAnymore.Width := 130;
  y := -1;
  for i := 0 to result.ComponentCount-1 do
    if result.Components[i] is TButton then
    begin
      b := TButton(result.Components[i]);
      b.Left := b.Left + cbDontAskAnymore.Width + 16;
      Result.ClientWidth := Max(Result.ClientWidth, b.Left+b.Width+16);
      y := b.Top+b.Height-cbDontAskAnymore.Height;
    end;
  if y<0 then
    y := Result.ClientHeight - cbDontAskAnymore.height - 16;
  Result.Caption := Title;
  cbDontAskAnymore.Parent := Result;
  cbDontAskAnymore.Top := y;
  cbDontAskAnymore.Left := 8;
end;

function MessageDlgCheckbox(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; DefaultButton: TMsgDlgBtn;
  var cbDontAskAnymore: Boolean;
  const Title: string ='Confirmation';
  const CBMsg: string = 'Don''t ask anymore'): integer;
var
  f: TForm;
  c: TCheckbox;
begin
  f := MsgDlgWithCB(Msg,Title,CBMsg,DlgType,Buttons,DefaultButton,c);
  try
    result := f.ShowModal;
    cbDontAskAnymore := c.Checked;
  finally
    f.free;
  end;
end;

प्रणाली की मूल कार्यक्षमता जो ऐसी सुविधाएं प्रदान करती है वह कार्य संवाद एपीआई Vista में पेश की गई है। यह आपके लिए पुराने संदेशबॉक्स एपीआई की तुलना में अधिक सक्षम संवाद दिखाने का मतलब प्रदान करता है।

आपको एक्सपी का समर्थन करने की आवश्यकता है, तो आपको अपना स्वयं का संवाद बनाना होगा। उदाहरण के लिए TForm से लेकर और ShowModal को कॉल करके यदि आप ऐसा करते हैं, तो फ़ॉर्म को गतिशील रूप से स्वयं बनाने में सक्षम बनाते हैं जो संदेश आप दिखाते हैं, उसके लिए एक फ़ॉर्म न बनाएं!

मेरे कोडबेस में, मेरे पास कार्य संवाद एपीआई का अपना आवरण है। यह Windows के रनटाइम संस्करणों पर पता लगाता है जो कार्य संवाद का समर्थन नहीं करते हैं और कस्टम निर्मित डेल्फी संवाद पर वापस आते हैं।

SHMessageBoxCheck के बारे में मैं उस पर एक निर्भरता लेने के लिए थोड़ा सा सावधान रहना होगा। इसके प्रलेखन के अनुसार यह एक्सपी से परे समर्थित नहीं है, और आपको इसे ऑर्डिनल द्वारा आयात करना होगा। मुझे व्यक्तिगत रूप से चिंता हो रही थी कि इसे विंडोज के भविष्य के संस्करण से हटा दिया जा सकता है उस ने कहा, एमएस के पास ओएस रिलीज़ के साथ काम करने वाले लेगसी ऐप को बनाए रखने के लिए जो कुछ भी लेना है, उसके लिए एक मजबूत ट्रैक रिकॉर्ड है।







confirmation