不好意思,满多问题的,请大大帮帮忙!

w45763 2011-11-15 02:39:59

void __fastcall TMainForm::CreateMDIChild(String Name)
{
TMDIChild *Child;
TJPEGImage *JPEGImage;

//--- create a new MDI child window ----
Child = new TMDIChild(Application);
Child->Caption = Name;
Child->Image1->AutoSize = true;
if ( FileExists (Name) )
{
if( OpenPictureDialog1->FilterIndex == 1 ) // Open Bitmap image
{
Child->Image1->Picture->LoadFromFile(Name);
Child->ImageType = 1;
}
else // Open JPEG image
{
JPEGImage = new TJPEGImage;
JPEGImage->LoadFromFile( Name );
Child->Image1->Picture->Bitmap->Assign(JPEGImage);
Child->ImageType = 2;
}
Child->ClientHeight = Child->Image1->Picture->Bitmap->Height;
Child->ClientWidth = Child->Image1->Picture->Bitmap->Width;
Child->Image1->Height = Child->Image1->Picture->Bitmap->Height;
Child->Image1->Width = Child->Image1->Picture->Bitmap->Width;
FileSaveItem->Enabled = true;
Child->FileName = Name; // Save the original filename
}
}

void __fastcall TMainForm::FileOpen1Execute(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
CreateMDIChild(OpenPictureDialog1->FileName);
}

void __fastcall TMainForm::GrayClick(TObject *Sender)
{
TMDIChild *Child;
Byte* ptr;
Byte grey;

Child = ((TMDIChild*) ActiveMDIChild);

for(int i=0; i< Child->Image1->Picture->Bitmap->Height; i++)
{
// Get the pointers of Image1
ptr = (Byte*) Child->Image1->Picture->Bitmap->ScanLine[i];
for(int j=0; j<Child->Image1->Picture->Bitmap->Width; j++)
{
// Convert color image to grey tone image using average RGB
grey = (ptr[j*3] + ptr[j*3+1] + ptr[j*3+2])/3;
// Update the pixels in image2 using the pointer of image2
ptr[j*3] = ptr[j*3+1] = ptr[j*3+2] = grey;
}
}
Child->Image1->Repaint();
}
//---------------------------------------------------------------------------

void __fastcall TMainForm::FileSaveItemClick(TObject *Sender)
{
TMDIChild *Child;
TJPEGImage *JPEGImage;

Child = ((TMDIChild*) ActiveMDIChild);
if(SavePictureDialog1->Execute())
if( Child->ImageType == 1 )
Child->Image1->Picture->Bitmap->SaveToFile( Child->FileName );
else if( Child->ImageType == 2 )
{
JPEGImage = new TJPEGImage;
JPEGImage->Assign( Child->Image1->Picture->Bitmap );
JPEGImage->SaveToFile( Child->FileName );
}
}



void __fastcall TMDIChild::Image1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
HDC hdc = ::GetDC(Handle);
COLORREF pcolor = ::GetPixel(hdc,X,Y);
unsigned int r = GetRValue(pcolor);
unsigned int g = GetGValue(pcolor);
unsigned int b = GetBValue(pcolor);
MainForm->StatusBar->Panels->Items[0]->Text = = "X = "+AnsiString(X)+" ,Y = "+AnsiString(Y)+" , R: "+AnsiString(r)+" G: "+AnsiString(g)+" B: "+AnsiString(b);
ReleaseDC(0,hdc);
}


1.在Image1MouseMove源码里面 MainForm->StatusBar->Panels->Items[0]->Text.....会跑出以下错误
Project mdiapp.exe raised exception class EAccessViolation with message
'Access violation at address 00402638 in module 'mdiapp.exe'.Read of address 000604A8.'Process stopped.Use Step or Run to continue.
但是如果改成Caption没问题可以显示,但是我是想要显示在StatusBar里,不知道该怎办

2.FileSaveItemClick源码中,始终没办法存更新(图像处理)后的子窗口

3.也是最麻烦的,GrayClick源码里面可以执行是没问题的,但是不是我要的效果,因为他没办法将处理完后的再显示另一子窗口,而是直接在该子窗口处理完后再显示,而窗口并没增加,知道这有点为难,不过如果能至少解决上面两个我就很感激了ˊˋ
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jone7319 2011-11-15
  • 打赏
  • 举报
回复
第三个问题是你新建的子窗口给这指向ActiveMDIChild,当然不会生成新的子窗口,如果想要新建的子窗口:
TMDIChild *Child=new .....
TImage *pic=new .....

jone7319 2011-11-15
  • 打赏
  • 举报
回复
第二个问题是你那个变量 ActiveMDIChild是否之前已正确赋值?是哪个子窗口,在保存之前给它指定了没有?
jone7319 2011-11-15
  • 打赏
  • 举报
回复
StatusBar->Panels->Add();
StatusBar->Panels->Items[0]->Text="abc";
ydlchina 2011-11-15
  • 打赏
  • 举报
回复
StatusBar 这个组件要先建立一个Item,鼠标放在其上,点右键,网上搜搜其如何使用
jone7319 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 w45763 的回复:]
我补一下, Image1MouseMove里面的确我多打了一个 = 符号,这点先说抱歉,
另外我还少补了一个TMainForm *Form;这个。

1. 另外大大StatusBar->Panels->Add(),本身我就有新增一个Items[0]了,所以应该不用在新增了
2. 变量 ActiveMDIChild是否之前已正确赋值?是哪个子窗口,在保存之前给 它指定了没有?这点我有点看不懂……
[/Quote]
ActiveMDIChild到底是不是你画了图的那个子窗口,如果是就能保存,不是就保存不了图。
纯冰糖 2011-11-15
  • 打赏
  • 举报
回复
1)Items[0]->Text = = "X 确定两个 ==?错了吧
w45763 2011-11-15
  • 打赏
  • 举报
回复
我补一下, Image1MouseMove里面的确我多打了一个 = 符号,这点先说抱歉,
另外我还少补了一个TMainForm *Form;这个。

1. 另外大大StatusBar->Panels->Add(),本身我就有新增一个Items[0]了,所以应该不用在新增了
2. 变量 ActiveMDIChild是否之前已正确赋值?是哪个子窗口,在保存之前给 它指定了没有?这点我有点看不懂,不是Child = ((TMDIChild*) ActiveMDIChild);已有了吗
3. 那个可以大概我给源码吗?我大概懂你的意思,不过却还没写不出来

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧