void __fastcall TPlayer::FormCreate(TObject *Sender)
{
MediaPlayer1->FileName="";
TrackBar1->Enabled=false;
InitShow();
}
void TPlayer::InitShow()
{
if (MediaPlayer1->FileName!="")
{
MediaPlayer1->Open();
TrackBar1->Enabled=true;
UpdataTrackBar();
TrackBar1->SetFocus();
MediaPlayer1->Frames=1;
Label1->Caption=String(MediaPlayer1->StartPos);
Label2->Caption=String(MediaPlayer1->Length/2);
Label3->Caption=String(MediaPlayer1->Length);
}
else
{
Label1->Caption="";
Label2->Caption="";
Label3->Caption="";
Label4->Caption="";
}
}
void TPlayer::UpdataTrackBar()
{
TrackBar1->Min=MediaPlayer1->StartPos;
TrackBar1->Max=MediaPlayer1->Length;
TrackBar1->Position=MediaPlayer1->Position;
Label4->Caption="当前位置:"+String(MediaPlayer1->Position);
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::FormClose(TObject *Sender, TCloseAction &Action)
{
MediaPlayer1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::openClick(TObject *Sender)
{
char time[100];
int n;
MediaPlayer1->Close();
TrackBar1->Enabled=false;
Label1->Caption="";
Label2->Caption="";
Label3->Caption="";
Label4->Caption="";
if (OpenDialog1->Execute())
{
MediaPlayer1->FileName=OpenDialog1->FileName;
strcpy(time,(MediaPlayer1->FileName).c_str());
n=strlen(time);
Edit3->Text=DateToStr(Date())+" "+time[n-12]+time[n-11]+":"+time[n-9]+time[n-8]+":"+time[n-6]+time[n-5];
InitShow();
MediaPlayer1->Play();
}
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::TrackBar1Change(TObject *Sender)
{
MediaPlayer1->Position=TrackBar1->Position;
Label4->Caption="当前位置:"+String(MediaPlayer1->Position);
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::newjClick(TObject *Sender)
{
bitmap = new Graphics::TBitmap;
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::photoClick(TObject *Sender)
{
TCanvas *Desk=new TCanvas;
Desk->Handle=GetDC(0);
TRect WindowRect=Rect(Left+Panel1->Left+2,+Panel1->+2,Left+Panel1->Left+2+638,+Panel1->+2+478);
bitmap->Width=638;
bitmap->Height=478;
bitmap->Canvas->CopyRect(bitmap->Canvas->ClipRect,Desk,WindowRect);
ReleaseDC(0,Desk->Handle);
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::saveClick(TObject *Sender)
{
int id;
DataMod->ADOQuery1->Active=true;
DataMod->ADOQuery1->Last();
id=DataMod->ADOQuery1->FieldValues["ID"];
if (ComboBox2->Text!=""&&Edit2->Text!=""&&ComboBox1->Text!=""&&bitmap->Empty==false&&bitmap1->Empty==false&&bitmap2->Empty==false&&bitmap3->Empty==false&&bitmap4->Empty==false&&bitmap5->Empty==false)
{
DataMod->ADOQuery1->Append();
TMemoryStream *pmem=new TMemoryStream();
pmem->Seek(0,soFromBeginning);
bitmap->SaveToStream(pmem);
((TBlobField *)DataMod->ADOQuery6->FieldByName("照片"))->LoadFromStream(pmem);
delete bitmap;
delete pmem;
DataMod->ADOQuery1->FieldValues["ID"]=id+1;
DataMod->ADOQuery1->FieldValues["照片概述"]=Edit2->Text;
DataMod->ADOQuery1->Post();
}
}
//---------------------------------------------------------------------------
void __fastcall TPlayer::quitClick(TObject *Sender)
{
Close();
}
//------------------------------------------------------------------------数据库我采用的是SQLserver 2000,为什么存入一定记录后就出现内存不足的错误提示呢?如果我将数据库中的记录全部清空后,就没有问题了。我存的照片是640*480的分辨率。大概存入600多的字段就报内存不足了。请大侠们帮忙,分数少了点,但是我确实是清囊了,等我分数多了还可以给大家补上!!
数据库部分没看,你一共new了3次:
bitmap = new Graphics::TBitmap;
TCanvas *Desk=new TCanvas;
TMemoryStream *pmem=new TMemoryStream();
都delete了吗?他们是配对的吗?
对呀,只见你new没见你delete,多搞几次,当然就不行了。
new和delete最好在同一段代码中!
bitmap在newjClick()代码中new,却在saveClick()中delete。
你能保证一定是先newjClick()再saveClick(),并且次数相同?!
还有只见TCanvas *Desk=new TCanvas;没见delete Desk;
最好 new 一个 bitmap,保存之,就马上 delete。
你保存的数据在ADOQuery1中,它也是在内存中的。
不知你的ADOQuery1的SQL属性是如何设置的?
当ADOQuery1打开时请不要读取过多的记录。