如何在c++;具有可用主题样式的生成器? 如何在C++ Builder中填充列表框,并使用可用的主题样式?< /P>

如何在c++;具有可用主题样式的生成器? 如何在C++ Builder中填充列表框,并使用可用的主题样式?< /P>,c++,c++builder,C++,C++builder,我在Delphi XE8中执行了这样的任务: {*----------------------------------------------------------------------------- Procedure: StylesListRefresh Author: Mr. Arch Brooks, Software Engineer, Brooks Computing Systems LLC Date: 06-Aug-2015 @Param

我在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);
        }

}
//---------------------------------------------------------------------------
#包括
#包括
#布拉格语hdrstop
#包括“TopFormStylesu.h”
// ---------------------------------------------------------------------------
#pragma包(智能初始化)
#pragma资源“*.dfm”
使用名称空间std;
TTopFormStyles*TopFormStyles;
//TTopFormStyles*样式刷新;
void StylesRefresh();
// ---------------------------------------------------------------------------
__快速调用TTopFormStyles::TTopFormStyles(TComponent*Owner):TForm(Owner){
风格清新;
}
// ---------------------------------------------------------------------------
void StylesRefresh(){
int i;
字符串样式名;
TopFormStyles->ListBox1->Items->Clear();
i=0;
styleName=TStyleManager->styleName;
styleName=styleName;
//TStyleManager::StyleNames中的styleName;
而(styleName=TStyleManager::styleName.>“”)
做{
TopFormStyles->ListBox1->Items->Add(样式名);
}
}
请举例说明如何填充列表框

我们也欢迎任何其他改进和建议。

是一个类,而不是一个对象
StyleNames
是该类的
静态
属性,因此需要使用
而不是
->
来访问它。并且它返回一个字符串数组,您没有正确地枚举它

试试这个:

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
//---------------------------------------------------------------------------
#ifndef TopFormStylesuH
#定义TopFormStylesuH
//---------------------------------------------------------------------------
#包括
#包括
#包括
#包括
//...
//---------------------------------------------------------------------------
TTopFormStyles类:公共TForm
{
__已发布://IDE托管组件
TListBox*ListBox1;
//...
private://用户声明
void StylesRefresh();
//...
public://用户声明
__fastcall TTopFormStyles(t组件*所有者);
//...
};
//---------------------------------------------------------------------------
外部包装TTopFormStyles*TopFormStyles;
//---------------------------------------------------------------------------
#恩迪夫
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();
    }
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#包括
#布拉格语hdrstop
#包括“TopFormStylesu.h”
#包括
//---------------------------------------------------------------------------
#pragma包(智能初始化)
#pragma资源“*.dfm”
TTopFormStyles*TopFormStyles;
//---------------------------------------------------------------------------
__快速调用TTopFormStyles::TTopFormStyles(t组件*所有者)
:t表格(所有者)
{
StylesRefresh();
}
//---------------------------------------------------------------------------
void TTopFormStyles::StylesRefresh()
{
ListBox1->Items->BeginUpdate();
尝试
{
ListBox1->Items->Clear();
DynamicArray styleNames=Vcl::Themes::TStyleManager::styleNames;
for(int i=0;iItems->Add(样式名);
}
}
__最后
{
ListBox1->Items->EndUpdate();
}
}
//---------------------------------------------------------------------------

这似乎不起作用。生成以下错误:[bcc64 error]TopFormStylesu.cpp(24):应为类或名称空间。我已更新源代码,新列表已作为更新发布。请不要犹豫,让我知道还需要什么。@ArchBrooks也许会更新您的问题?我认为这更可取。唯一的办法是更新问题。我就是这么做的。更新的源对于“评论”部分来说太大。我误解了什么?Remy,这不起作用,但产生了以下错误:[bcc64错误]TopFormStylesuo.cpp(20):使用未声明的标识符'StylesRefresh'[bcc64错误]TopFormStylesuo.cpp(23):'StylesRefresh'的越位定义与'TTopFormStyles'中的任何声明都不匹配