收录日期:2020/10/20 20:24:29 时间:2016/05/31 13:45:07 标签:VCL组件使用和开发
写了 如下的代码
void __fastcall TFormAddCar::StringGridSelectCell(TObject *Sender,
      int ACol, int ARow, bool &CanSelect)
{
  if(0==ACol)
    {

        StringGrid->Options=StringGrid->Options << goRowSelect;
        StringGrid->Options=StringGrid->Options >> goEditing;
        StringGrid->Options=StringGrid->Options >> goAlwaysShowEditor;

        Button5->Enabled=true;

    }
    else
    {
        StringGrid->Options=StringGrid->Options >> goRowSelect;
        StringGrid->Options=StringGrid->Options << goEditing;
        StringGrid->Options=StringGrid->Options << goAlwaysShowEditor;
        Button5->Enabled=false;
         if(ACol==1 || ACol==4 ||ACol==5 || ACol==6 || ACol==8 || ACol==9 )
        {
            int TemLeft=0,TemTop=0;
            int TemCount=0;
            Box->Visible=true;
            Box->Parent=StringGrid;

            for(int i=0;i<ACol;i++)
            {
                TemLeft=StringGrid->ColWidths[i]+TemLeft;
                TemCount++;
            }
            TemLeft=TemLeft+StringGrid->GridLineWidth * TemCount;

            TemCount=0;
            for(int i=0;i<ARow;i++)
            {
                TemTop=StringGrid->RowHeights[i]+TemTop;
                TemCount++;
            }
            TemTop=TemTop+StringGrid->GridLineWidth * TemCount;
            Box->Top=TemTop;
            Box->Left=TemLeft;
            Box->Width=StringGrid->ColWidths[ACol];
            Box->Height=StringGrid->RowHeights[ARow];

            Box->BringToFront();
            Box->SetFocus();
            switch(ACol)
            {
                case 1:
                    Box->Clear();
                    Box->Items->Add("亚洲");
                    Box->Items->Add("欧洲");
                    Box->Items->Add("非洲");
                    Box->Items->Add("北美洲");
                    Box->Items->Add("南美洲");
                    Box->Items->Add("大洋洲");
                    if(StringGrid->Cells[ACol][ARow]!="")
                        Box->Text=StringGrid->Cells[ACol][ARow];
                    else
                        StringGrid->Cells[ACol][ARow]=Box->Items->Strings[0];
                    break;
                case 4:
                    Box->Clear();
                    Box->Items->Add("汽油机");
                    Box->Items->Add("柴油机");
                    if(StringGrid->Cells[ACol][ARow]!="")
                        Box->Text=StringGrid->Cells[ACol][ARow];
                    else
                        StringGrid->Cells[ACol][ARow]=Box->Items->Strings[0];
                    break;
                case 5:
                    Box->Clear();
                    Box->Items->Add("2冲程");
                    Box->Items->Add("4冲程");
                    if(StringGrid->Cells[ACol][ARow]!="")
                        Box->Text=StringGrid->Cells[ACol][ARow];
                    else
                        StringGrid->Cells[ACol][ARow]=Box->Items->Strings[0];

                    break;
                case 6:
                    Box->Clear();
                    Box->Items->Add("汽油机");
                    Box->Items->Add("柴油机");
                    if(StringGrid->Cells[ACol][ARow]!="")
                        Box->Text=StringGrid->Cells[ACol][ARow];
                    else
                        StringGrid->Cells[ACol][ARow]=Box->Items->Strings[0];
                    break;
                case 8:
                    break;
                case 9:
                    break;
                default:
                    break;

            }

        }
        else
        {
            Box->Visible=false;
        }

    }
}
ComboBox控件能显示正确,但就是ComboBox不能显示出下拉条
这是为什么啊 ,希望高手指点!!


注:
在窗体创建是就Box =new TComboBox(Application)了;
怎么没有人理啊 我都急得不行了
我也碰到过这样的问题,具体原因不清楚,试试Box在StringGridSelectCell中new(我是这样解决的)
你要指定他的Parent属性才行啊,而且如果有滚动条的话就要进行一番处理,不然定位不准的。
以前所写:是不是这样就行?
在第三列显示Box1
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int Col,
      int Row, TRect &Rect, TGridDrawState State)
{
   if (State.Contains(gdFocused) &&(Col==3))  {
     Box1->Top    = Rect.Top  + StringGrid1->Top;
     Box1->Left   = Rect.Left + StringGrid1->Left;
     Box1->Height = Rect.Bottom - Rect.Top;;
     Box1->Width  = Rect.Right  - Rect.Left;;
     Box1->SetFocus();
   }
   else Edit1->Text = "Brow"; 
}
void __fastcall TForm1::StringGridClick(TObject *Sender)
{
     box->Height=100;
}
请加如这个就行了
hailin10(虎子) 
你要指定他的Parent属性才行啊,而且如果有滚动条的话就要进行一番处理,不然定位不准的。

该怎么解决不能准确定位的问题呢?
我试了几个办法都不能解决,望赐教!


 

在StringGrid中要获得Combobox所选中的内容并显示出来,有什么好方法吗?
void __fastcall TfrmTank::cmbChange(TObject *Sender)
{
    TComboBox *cmb;
    cmb = dynamic_cast<TComboBox *>(Sender);

    StringGrid1->Cells[pos.x][pos.y] = cmb->Text;
}
方法很多,给你一个例子,我这边用得是没问题的:
void __fastcall TfrmGlheader::processGridClick(TObject *Sender)
{
  if(processGrid->Row>0&&processGrid->Col==4)
  {
      selProcess->Parent=processGrid->Parent;

      selProcess->Width=processGrid->ColWidths[4];

      selProcess->Top=(processGrid->Row-processGrid->TopRow+1)*(processGrid->DefaultRowHeight)+(processGrid->Row-processGrid->TopRow+1)*1;
      selProcess->Left=processGrid->Left+1+processGrid->Left+processGrid->ColWidths[0]+processGrid->ColWidths[2]+processGrid->ColWidths[3]+1;

      selProcess->ItemIndex=selProcess->Items->IndexOf(Trim(processGrid->Cells[4][processGrid->Row]));

      selProcess->Visible=true;
      selProcess->BringToFront();

      selProcess->SetFocus();
  };
}
//---------------------------------------------------------------------------

-首先创建一个COMBOBOX,然后就用上面的方法加事件,记住COMBOBOX的parent不能是StringGrid
对了还要在combobox的OnSelect事件中写一段代码:
void __fastcall TfrmGlheader::selProcessSelect(TObject *Sender)
{
  processGrid->Cells[4][processGrid->Row]=selProcess->Text;
}

如何在驱动程序中更改文件名(急) 请教各位大虾。(在线等待!) 如何学习WSAD,从何处开始?看哪些书呢? notes代理中如何声明指针变量? 在vbscript中如何实现在javascript中的这个语句: this.name 谢谢各位! 各位大侠:linux菜鸟提问:如何在linux下去网站上ftp一些东东!? 有谁知道Oracle内部错误代码吗 请教高手(MDI).急急急 用javascript调用客户端时间问题!!! 娃哈哈和明基,你会选择谁? 机器的字符显示问题,SysBase + Delphi , 在线等, UP有分 12月份专家榜 C#调用Com+服务 采用paradox数据,post断电仍丢失数据?有何好方法解决?在线等待! 请问如何在Button事件中使用对话框? 请问怎样创建在PDA上面运行的程序? 请高手帮我看看 ado 灾难性故障 。。。。分不多!谢了! 有关于REPLACE()的简单问题!! 菜鸟问题, 想拿分的快进来 OutLook邮件中的附件变成灰色,打不开,怎办?谢谢! 如何清空原来上网时自动保存的帐号、密码? window2003 IIS出现这样的错误? 请教有关输出window.prompt的值的问题,在线等(急) 一大早,问个关于树型菜单的问题。 寻找dllsf 在做 include 时出现一个警告,但内容正确显示了,想知道如何解决? ?问个 病毒的问题请热心人帮一下忙,问题很 棘手!(机器中了 win32.foroux.a和win32。trojmirhunter。28160病毒) 如何用install shield安装.net框架并且在安装过程中不出现提示? 请高手帮我看看