1、我在一个窗体Image中显示图片,代码为:
procedure TForm3.Button3Click(Sender: TObject);begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
这样图片在Image中的显示没有问题,并且我将Image存入到数据库图片字段代码为:
Unit3.DataModule3.ADOTable1.FieldByName('Userphoto').Assign(Image1.Picture.Graphic);
但在另一个窗体的DBImage中我要显示存放在数据库的图片,DATAFIELD设置成数据库图片字段后,编译能通过,但一运行后仍有提示*.EXE raised exception class EInvalidGraphic with message 'bitmap image is not valid'.(说明一下,数据库图片字段有空数据)
2、如何在关闭非主窗体时,同时关闭主窗体,结束应用程序??我用的是
procedure TForm2.FormClose(Sender: TObject);
begin
Application.Terminate;
end;
3、如何让非主窗体在程序运行时先于主窗体显示。请问代码如何编写或者属性如何设置。
请各位高手不吝赐教,真的很急!!!!
procedure TForm3.Button3Click(Sender: TObject);begin
if OpenPictureDialog1.Execute then
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
这样图片在Image中的显示没有问题,并且我将Image存入到数据库图片字段代码为:
Unit3.DataModule3.ADOTable1.FieldByName('Userphoto').Assign(Image1.Picture.Graphic);
但在另一个窗体的DBImage中我要显示存放在数据库的图片,DATAFIELD设置成数据库图片字段后,编译能通过,但一运行后仍有提示*.EXE raised exception class EInvalidGraphic with message 'bitmap image is not valid'.(说明一下,数据库图片字段有空数据)
2、如何在关闭非主窗体时,同时关闭主窗体,结束应用程序??我用的是
procedure TForm2.FormClose(Sender: TObject);
begin
Application.Terminate;
end;
3、如何让非主窗体在程序运行时先于主窗体显示。请问代码如何编写或者属性如何设置。
请各位高手不吝赐教,真的很急!!!!
2.sendmessage 一个ws_close消息给主窗体可行吗?个人让为那么内存释放的好些
3.改写Project单元,在application.Initialize后先show非主窗体
procedure TFrmEmployee.spbAddPhotoClick(Sender: TObject);
var
lExtName: string;
lJpegImage: TJpegImage;
begin
inherited;
// Save 將數據庫的圖片保存為文件
if Sender = spbSavePhoto then
if SavePictureDialog.Execute then
begin
lExtName := ExtractFileExt(SavePictureDialog.FileName);
if (UpperCase(lExtName) = '.JPG')
or (UpperCase(lExtName) = '.JEPG') then
begin
lJpegImage := TJpegImage.Create;
try
lJpegImage.Assign(dbimgPhoto.Picture.Graphic);
lJpegImage.SaveToFile(SavePictureDialog.FileName);
finally
lJpegImage.Free;
end; // end try
end else
TBlobField(adodstMas.FieldByName('Photo')).SaveToFile(SavePictureDialog.FileName);
end; if not (adodstMas.State in [dsEdit, dsInsert]) then exit;
// Add 將文件保存到數據庫
if Sender = spbAddPhoto then
if OpenPictureDialog.Execute then
begin
lExtName := ExtractFileExt(OpenPictureDialog.FileName);
if (UpperCase(lExtName) = '.JPG')
or (UpperCase(lExtName) = '.JEPG') then
begin
lJpegImage := TJpegImage.Create;
try
lJpegImage.LoadFromFile(OpenPictureDialog.FileName);
dbimgPhoto.Picture.Graphic.Assign(lJpegImage);
finally
lJpegImage.Free;
end; // end try
end else
TBlobField(adodstMas.FieldByName('Photo')).LoadFromFile(OpenPictureDialog.FileName);
end; // end if OpenPictureDialog.Execute then // Clear 刪除數據庫中保存的圖片
if Sender = spbClearPhoto then
adodstMas.FieldByName('Photo').AsVariant := Null;
end;2.
先用
for i := 0 to Application.MainForm.MDIChildCount - 1 do
begin
Application.MainForm.MDIChildren[i].Close;
end
Application.MainForm.Close;3.
Project文件中 if TFrmLogin.Execute = 1 then // 創建登錄窗體
begin
Application.CreateForm(TFrmMain, FrmMain);// 創建主窗體
Application.BringToFront;
end;
第三个问题,我的主窗体和登录窗体已经创建完成,但运行后我想让登录窗体先显示,我如何填加代码呢?
begin
// ext:=extractfileext(openpicturedialog1.FileName );
strm := tmemorystream.Create ;
try
image1.Picture.Graphic.SaveToStream(strm);
strm.Position :=0;
tblobfield(dataMod.ADOQry_stu.FieldByName('photo')).LoadFromStream(strm);
finally
strm.Free; //如果你选用TBLOBSTREAM类,程序运行到此语句会出错,可该语句前添入adotable1.edit
end;
end;
try //try1
strm := tadoblobstream.Create(tblobfield(dataMod.ADOQry_detail.fieldbyname('photo')),bmread);
strm.position :=0;
// image1.Picture.Graphic := nil;
jpegimage := tjpegimage.Create ;
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
jpegimage.Free ;
strm.Free ;
except
;
end;
特别是操作ORACLE数据库时问题特别多
但运行后我想让登录窗体先显示你可以在工程资源文件中把登录窗体在主窗体前建立,你也可以在主窗体体SHOW时显示登录窗体
Application.Initialize;
SubForm := TSubForm.Create(nil);
try
if SubFrom.ShowModal = mrOk then
begin
MainForm := TMainForm.Create(nil);
try
MainForm.Show;
finally
MainForm.Free;
end;
end;
finally
SubFrom.Free;
end;
如果dbimage不能正常显示,那就换image拉,在adouqery的afterScroll事件里就行呀
如果没有要求一定用ADO的话,那换个方式,更简单!!!
2),3)应该不难吧,好像没有现成的,自己写个语句控制一下就成了