604
社区成员
发帖
与我相关
我的任务
分享
void __fastcall TForm1::RzComboBox1DrawItem(TWinControl *Control, int Index,
TRect &Rect, TOwnerDrawState State)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Control);
if (!rcbx) return;
// 如果当前项处于选择状态
if (State.Contains(odSelected))
{
// 以高亮色填充背景
rcbx->Canvas->Brush->Color = TColor(0x00FF9933);
rcbx->Canvas->FillRect(Rect);
}
else
{
// 非选中项的背景色填充
rcbx->Canvas->Brush->Color = rcbx->Color;
rcbx->Canvas->FillRect(Rect);
}
// 判断当前项的Check状态并决定是否绘制Check图像
bool bChecked = bool(rcbx->Items->Objects[Index]);
if (bChecked || State.Contains(odComboBoxEdit))
{
RECT rctButton =
{
Rect.Left + 2,
Rect.Top + 2,
Rect.Left + RzComboBox1->ItemHeight - 2,
Rect.Top + RzComboBox1->ItemHeight - 2
};
// 63 63 72 75 6E 2E 63 6F 6D
DrawFrameControl(rcbx->Canvas->Handle,
&rctButton,
DFC_BUTTON,
DFCS_CHECKED | DFCS_FLAT); // DFCS_BUTTONCHECK
}
else
{
RECT rctButton =
{
Rect.Left + 2,
Rect.Top + 2,
Rect.Left + RzComboBox1->ItemHeight - 2,
Rect.Top + RzComboBox1->ItemHeight - 2
};
// 63 63 72 75 6E 2E 63 6F 6D
DrawFrameControl(rcbx->Canvas->Handle,
&rctButton,
DFC_BUTTON,
DFCS_FLAT); // DFCS_BUTTONCHECK
}
// 字体颜色
rcbx->Canvas->Font->Color = clBlack;
// 如果当前项是组合框的编辑状态就绘制出以逗号分隔的项目文本串
if (State.Contains(odComboBoxEdit))
{
String strText;
for (int i = 0; i < RzComboBox1->Items->Count; i++)
{
if (bool(rcbx->Items->Objects[i]))
{
if (strText == "")
strText = rcbx->Items->Strings[i];
else
strText += "," + rcbx->Items->Strings[i];
}
}
rcbx->Canvas->Brush->Color = rcbx->Color;
rcbx->Canvas->FillRect(Rect);
rcbx->Canvas->TextOutA(Rect.Left+3,Rect.Top + (Rect.Height() - rcbx->Canvas->TextHeight("A")) / 2,strText);
}
else // 普通项目
{
rcbx->Canvas->TextOutA(Rect.Left + rcbx->ItemHeight,
Rect.Top + (Rect.Height() - rcbx->Canvas->TextHeight("A")) / 2,
rcbx->Items->Strings[Index]);
}
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
RzComboBox1->Items->AddObject("111", (TObject *)true);
RzComboBox1->Items->AddObject("222", (TObject *)true);
RzComboBox1->Items->AddObject("333", (TObject *)false);
RzComboBox1->Items->AddObject("444", (TObject *)true);
RzComboBox1->Items->AddObject("555", (TObject *)false);
RzComboBox1->ItemIndex = 0;
RzComboBox1->Style = csOwnerDrawFixed;
RzComboBox1->ItemHeight = 18;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RzComboBox1DrawItem(TWinControl *Control,
int Index, TRect &Rect, TOwnerDrawState State)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Control);
if (!rcbx) return;
// 如果当前项处于选择状态
if (State.Contains(odSelected))
{
// 以高亮色填充背景
rcbx->Canvas->Brush->Color = TColor(0x00FF9933);
rcbx->Canvas->FillRect(Rect);
}
else
{
// 非选中项的背景色填充
rcbx->Canvas->Brush->Color = rcbx->Color;
rcbx->Canvas->FillRect(Rect);
}
// 判断当前项的Check状态并决定是否绘制Check图像
bool bChecked = bool(rcbx->Items->Objects[Index]);
if (bChecked || State.Contains(odComboBoxEdit))
{
RECT rctButton =
{
Rect.Left + 2,
Rect.Top + 2,
Rect.Left + RzComboBox1->ItemHeight - 2,
Rect.Top + RzComboBox1->ItemHeight - 2
};
// 63 63 72 75 6E 2E 63 6F 6D
DrawFrameControl(rcbx->Canvas->Handle,
&rctButton,
DFC_BUTTON,
DFCS_CHECKED | DFCS_FLAT); // DFCS_BUTTONCHECK
}
// 字体颜色
rcbx->Canvas->Font->Color = clBlack;
// 如果当前项是组合框的编辑状态就绘制出以逗号分隔的项目文本串
if (State.Contains(odComboBoxEdit))
{
String strText;
for (int i = 0; i < RzComboBox1->Items->Count; i++)
{
if (bool(rcbx->Items->Objects[i]))
{
if (strText == "")
strText = rcbx->Items->Strings[i];
else
strText += "," + rcbx->Items->Strings[i];
}
}
rcbx->Canvas->TextOutA(Rect.Left + RzComboBox1->ItemHeight,
Rect.Top + (Rect.Height() - rcbx->Canvas->TextHeight("A")) / 2,
strText);
}
else // 普通项目
{
rcbx->Canvas->TextOutA(Rect.Left + RzComboBox1->ItemHeight,
Rect.Top + (Rect.Height() - rcbx->Canvas->TextHeight("A")) / 2,
rcbx->Items->Strings[Index]);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RzComboBox1Click(TObject *Sender)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Sender);
if (!rcbx || rcbx->ItemIndex == -1) return;
bool bChecked = bool(rcbx->Items->Objects[rcbx->ItemIndex]);
rcbx->Items->Objects[rcbx->ItemIndex] = (TObject *)!bChecked;
}
void __fastcall TForm1::RzComboBox1Click(TObject *Sender)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Sender);
if (!rcbx) return;
bool bChecked = bool(rcbx->Items->Objects[rcbx->ItemIndex]);
rcbx->Items->Objects[rcbx->ItemIndex] = (TObject *)!bChecked;
AnsiString Str;
for(int i=0;i<RzComboBox1->Items->Count;i++)
{
if(bool(rcbx->Items->Objects[i]))
{
if(Str=="")
Str=rcbx->Items->Strings[i];
else
Str+=","+rcbx->Items->Strings[i];
}
}
rcbx->ItemIndex=-1;
rcbx->Canvas->TextOutA(2,2,Str);;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
RzComboBox1->Items->AddObject("111", (TObject *)true);
RzComboBox1->Items->AddObject("222", (TObject *)true);
RzComboBox1->Items->AddObject("333", (TObject *)false);
RzComboBox1->Items->AddObject("444", (TObject *)true);
RzComboBox1->Items->AddObject("555", (TObject *)false);
RzComboBox1->Style = csOwnerDrawFixed;
RzComboBox1->ItemHeight = 18;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RzComboBox1DrawItem(TWinControl *Control,
int Index, TRect &Rect, TOwnerDrawState State)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Control);
if (!rcbx) return;
// 如果当前项处于选择状态
if (State.Contains(odSelected))
// 或焦点状态或者是组合框的编辑状态
// || State.Contains(odSelected) || State.Contains(odComboBoxEdit))
{
// 以高亮色填充背景
rcbx->Canvas->Brush->Color = TColor(0x00FF9933);
rcbx->Canvas->FillRect(Rect);
}
else
{
// 非选中项的背景色填充
rcbx->Canvas->Brush->Color = rcbx->Color;
rcbx->Canvas->FillRect(Rect);
}
// 判断当前项的Check状态并决定是否绘制Check图像
bool bChecked = bool(rcbx->Items->Objects[Index]);
if (bChecked)
{
RECT rctButton =
{
Rect.Left + 2,
Rect.Top + 2,
Rect.Left + RzComboBox1->ItemHeight - 2,
Rect.Top + RzComboBox1->ItemHeight - 2
};
// 63 63 72 75 6E 2E 63 6F 6D
DrawFrameControl(rcbx->Canvas->Handle,
&rctButton,
DFC_BUTTON,
DFCS_CHECKED | DFCS_FLAT); // DFCS_BUTTONCHECK
}
// 字体颜色
rcbx->Canvas->Font->Color = clBlack;
// 绘出项目文本
rcbx->Canvas->TextOutA(Rect.Left + RzComboBox1->ItemHeight,
Rect.Top + (Rect.Height() - rcbx->Canvas->TextHeight("A")) / 2,
rcbx->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RzComboBox1Click(TObject *Sender)
{
TRzComboBox *rcbx = dynamic_cast <TRzComboBox *>(Sender);
if (!rcbx) return;
bool bChecked = bool(rcbx->Items->Objects[rcbx->ItemIndex]);
rcbx->Items->Objects[rcbx->ItemIndex] = (TObject *)!bChecked;
}