2015-08-08 23 views
0

如何使用可用的主題樣式填充C++ builder中的列表框?如何使用可用的主題樣式填充C++ builder中的列表框?

我在Delphi XE8執行這個任務,像這樣:

{*----------------------------------------------------------------------------- 
    Procedure: StylesListRefresh 
    Author: Mr. Arch Brooks, Software Engineer, Brooks Computing Systems LLC 
    Date:  06-Aug-2015 
    @Param  None 
    @Return None 
-----------------------------------------------------------------------------} 

procedure TTopFormStylesC.StylesListRefresh; 
var 
    styleName : string; 
begin 
    lbxStyles.Items.Clear; 
    for stylename in TStyleManager.StyleNames do 
    begin 
    lbxStyles.Items.Add(stylename); 
    end; 
end; 

這裏是我的C++ Builder的源代碼:

// --------------------------------------------------------------------------- 

#include <vcl.h> 
#include <string> 
#pragma hdrstop 

#include "TopFormStylesu.h" 
// --------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 
using namespace std; 
TTopFormStyles *TopFormStyles; 
// TTopFormStyles *StylesRefresh; 
void StylesRefresh(); 

// --------------------------------------------------------------------------- 
__fastcall TTopFormStyles::TTopFormStyles(TComponent* Owner) : TForm(Owner) { 
    StylesRefresh; 
} 

// --------------------------------------------------------------------------- 
void StylesRefresh() { 
    int i; 
    string styleName; 
    TopFormStyles->ListBox1->Items->Clear(); 
    i = 0; 
    styleName = TStyleManager->StyleNames; 
    styleName = styleName; 
    // styleName in TStyleManager::StyleNames; 
    while (styleName = TStyleManager::StyleNames. > "") 
     do { 
      TopFormStyles->ListBox1->Items->Add(styleName); 
     } 

} 

如何填充列表框的一個例子,將不勝感激。

任何其他改進和建議也歡迎。

回答

0

TStyleManager是一類,而不是一個對象。 StyleNames是該類的static屬性,因此您需要使用::而不是->來訪問它。它返回一個字符串數組,你沒有正確枚舉。

試試這個:

TopFormStylesu.h:

//--------------------------------------------------------------------------- 

#ifndef TopFormStylesuH 
#define TopFormStylesuH 
//--------------------------------------------------------------------------- 
#include <System.Classes.hpp> 
#include <Vcl.Controls.hpp> 
#include <Vcl.StdCtrls.hpp> 
#include <Vcl.Forms.hpp> 
//... 
//--------------------------------------------------------------------------- 
class TTopFormStyles : public TForm 
{ 
__published: // IDE-managed Components 
    TListBox *ListBox1; 
    //... 
private: // User declarations 
    void StylesRefresh(); 
    //... 
public:  // User declarations 
    __fastcall TTopFormStyles(TComponent* Owner); 
    //... 
}; 
//--------------------------------------------------------------------------- 
extern PACKAGE TTopFormStyles *TopFormStyles; 
//--------------------------------------------------------------------------- 
#endif 

TopFormStylesu.cpp:

//--------------------------------------------------------------------------- 

#include <vcl.h> 
#pragma hdrstop 

#include "TopFormStylesu.h" 
#include <Vcl.Themes.hpp> 

//--------------------------------------------------------------------------- 
#pragma package(smart_init) 
#pragma resource "*.dfm" 

TTopFormStyles *TopFormStyles; 

//--------------------------------------------------------------------------- 
__fastcall TTopFormStyles::TTopFormStyles(TComponent* Owner) 
    : TForm(Owner) 
{ 
    StylesRefresh(); 
} 
//--------------------------------------------------------------------------- 
void TTopFormStyles::StylesRefresh() 
{ 
    ListBox1->Items->BeginUpdate(); 
    try 
    { 
     ListBox1->Items->Clear(); 

     DynamicArray<String> styleNames = Vcl::Themes::TStyleManager::StyleNames; 

     for(int i = 0; i < styleNames.Length; ++i) 
     { 
      String styleName = styleNames[i]; 
      ListBox1->Items->Add(styleName); 
     } 
    } 
    __finally 
    { 
     ListBox1->Items->EndUpdate(); 
    } 
} 
//--------------------------------------------------------------------------- 
+0

似乎並沒有工作。生成以下錯誤: [bcc64錯誤] TopFormStylesu.cpp(24):期望類或命名空間 –

+0

Remy我更新了源代碼,並且新的列表已發佈爲更新。不要猶豫,讓我知道還有什麼是必需的。 –

+0

@ArchBrooks也許反而更新你的問題?我認爲這是可取的。 – ficuscr