2011-05-07 17 views
10

में TSaveDialog में एक चेकबॉक्स जोड़ने के लिए कैसे मैं TSaveDialog में एक चेकबॉक्स या अन्य वीसीएल घटक जोड़ना चाहता हूं।डेल्फी 2010

Cantu कहते हैं,

नई विस्टा ओपन और संवाद बॉक्स सहेजें (IFileOpenDialog और
IFileSaveDialog इंटरफेस द्वारा कार्यान्वित) सीधे नए FileOpenDialog और
FileSaveDialog घटकों, लेकिन यह भी मानक OpenDialog द्वारा मैप की जाती हैं और SaveDialog घटक वैश्विक उपयोगLatestCommonDialogs सेट होने पर नई शैली को
नई शैली का उपयोग करता है।

मुझे पता नहीं कि क्या मतलब है (मैं कभी नहीं किसी भी इंटरफ़ेस प्रोग्रामिंग किया है ...) है

और मैं तीसरे पक्ष के उपकरणों का उपयोग नहीं करना चाहते हैं।

मैंने देखा कि यह अभी एक वेब खोज पर सुझाव दिया गया है कि मैं TOpenPictureDialog कोड को देखता हूं और इसकी प्रतिलिपि बनाता हूं।

किसी भी पथ की कोशिश करने से पहले, मैंने सोचा कि मैं यहां कुछ मार्गदर्शन के लिए पूछूंगा। विंडोज 7 संस्करण स्वतंत्र तरीके से एक आधुनिक फ़ाइल, ओपन डायलॉग बॉक्स में चेकबॉक्स जोड़ने के लिए Win7 समाधान के माध्यम से XP पर कोई सुझाव?

टॉम

उत्तर

14

रॉबर्ट, आपको एक संवाद टेम्पलेट का उपयोग कर ऐसा कर सकते हैं।

सबसे पहले आप अपने अनुप्रयोग में एक संसाधन के रूप टेम्पलेट की दुकान चाहिए, तो TOpenFilename संरचना का उपयोग टेम्पलेट लोड (नाम से चिंता मत करो, खुला लिए एक ही है और संवाद बचाने के लिए) और अंत में GetSaveFileName समारोह गुजर फोन TOpenFilename संरचना।

जांच इस नमूने

संसाधन फ़ाइल (calledSaveDialog.rc) संवाद टेम्पलेट के साथ बनाएँ (देखो MyCheckBox जोड़ा)

MYSAVEFILE DIALOG -1, 1, 300, 60 
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS 
CAPTION "" 
FONT 8, "Tahoma" 
{ 
CONTROL "MyCheckBox", 666, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 19, 60, 12 
} 

इस स्रोत कोड है

Uses 
CommDlg; 

var 
    lpofn : TOpenFilename; 
    lpstrFile: Array[0..MAX_PATH-1] of Char; 

{$R *.dfm} 
{$R SaveDialog.Res} 

function _lpfnHook(hdlg: HWND; uiMsg:UINT;wParam:WPARAM;lParam:LPARAM): UINT stdcall; 
begin 
    Result:=0; 
    case uiMsg of 
    // Set the initial state of mycheckbox to checked 
    WM_INITDIALOG : CheckDlgButton(hdlg,666,BST_CHECKED); 
    WM_COMMAND : 
        case wParam of 
        666: 
         begin 
          if (IsDlgButtonChecked(hdlg,666)=BST_CHECKED) then 
          ShowMessage('MyCheckBox was checked') 
          else 
          if (IsDlgButtonChecked(hdlg,666)=BST_UNCHECKED) then 
          ShowMessage('MyCheckBox was unchecked'); 
         end; 
        end; 
    end; 
end; 

procedure TFrmMain.Button1Click(Sender: TObject); 
begin 
    ZeroMemory(@lpofn,sizeof(lpofn)); 
    lpofn.lStructSize  := SizeOf(lpofn); 
    lpofn.hwndOwner   := Handle; 
    lpofn.hInstance   := hInstance; 
    //set the filter name 
    lpofn.lpstrFilter  := 'All files (*.*)'#0'*.*'#0#0; 
    lpofn.lpstrTitle  := 'Save As'; 
    lpofn.lpstrFile   := lpstrFile; 
    lpofn.nMaxFile   := MAX_PATH; 
    //Set the template Name 
    lpofn.lpTemplateName :='MYSAVEFILE'; 
    //set the callback function 
    lpofn.lpfnHook   := _lpfnHook; 
    lpofn.Flags    := OFN_EXPLORER or OFN_CREATEPROMPT or OFN_HIDEREADONLY or 
          OFN_PATHMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLETEMPLATE; 
    //execute the dialog 
    if GetSaveFileName(lpofn) then ShowMessage(lpofn.lpstrFile); 
end; 

और यह आउटपुट

enter image description here

+0

अच्छी तरह से किया गया, आरआरयूजेड। महान उत्तर, प्लस नमूना कोड, और परिणाम के स्क्रीन कैप्चर दिखाता है। धन्यवाद! – RobertFrank

9

आप इसे टेम्पलेट के साथ कर सकते हैं लेकिन इससे Vista/7 में विरासत संवाद होते हैं। उन प्लेटफॉर्म पर आपको IFileDialogCustomize का उपयोग करना चाहिए। निश्चित रूप से XP का समर्थन करने के लिए आपको टेम्पलेट दृष्टिकोण को भी लागू करने की आवश्यकता है।

संबंधित मुद्दे