您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Delphi >> 又回来了,经过半年的修行后写了DB加速器

又回来了,经过半年的修行后写了DB加速器

来源:网络整理     时间:2016/8/12 14:23:17     关键词:

关于网友提出的“ 又回来了,经过半年的修行后写了DB加速器”问题疑问,本网通过在网上对“ 又回来了,经过半年的修行后写了DB加速器”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 又回来了,经过半年的修行后写了DB加速器
描述:

在知道OFFICE中的ACCESS其实是不如DELPHI之后,闭关修练了半年,终于:
1.掌握了ADO控件及EHLIB的用法.
2.掌握了控件及IDE扩展的开发.
3.写了一个ADO和EHLIB的扩展库.叫DB加速器.方便做二层数据库开发.
4.发现有了这套东西之后,数据库开发效率高了十倍.
5.见到有说TDBImage不能绑定加载JPG文件之后,又自行开发了TXImage(DB加速器的一部分源码).
TXImage的源码如下.有兴趣的朋友可以看看有什么不足之处.
 TXImage=class(TImage)
    private
      FDataLink: TFieldDataLink;
      MyPopMenu: TPopupMenu;
      ExtFileName:String;
      function GetDataField: string;
      function GetDataSource: TDataSource;
      procedure SetDataField(const Value: string);
      procedure SetDataSource(const Value: TDataSource);
      procedure DataChange(Sender: TObject);
      procedure UpdateData(Sender: TObject);
      procedure OnLoadMenuClick(Sender:TObject);
      procedure OnDelMenuClick(Sender:TObject);
      function CheckBlobField:TBlobField; 
    protected
      procedure Loaded;override;
      procedure DblClick; override;
    public
      constructor Create(AOwner:TComponent);override;
      destructor Destroy; override;
      procedure LoadPicture(FileName:String='');
      procedure DelPicture;
      
    published
      property DataField: string read GetDataField write SetDataField;
      property DataSource: TDataSource read GetDataSource write SetDataSource;
  end;
{ TXImage }
constructor TXImage.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FDataLink := TFieldDataLink.Create;
  FDataLink.Control := Self;
  FDataLink.OnDataChange := DataChange;
  FDataLink.OnUpdateData := UpdateData;
end;
destructor TXImage.Destroy;
begin
  FDataLink.Free;
  FDataLink := nil;
  inherited;
end;
function TXImage.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;
procedure TXImage.SetDataSource(const Value: TDataSource);
begin
  if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then
    FDataLink.DataSource := Value;
  if Value <> nil then Value.FreeNotification(Self);
end;
function TXImage.GetDataField: string;
begin
  Result := FDataLink.FieldName;
end;
procedure TXImage.SetDataField(const Value: string);
begin
  FDataLink.FieldName := Value;
end;
procedure TXImage.UpdateData(Sender: TObject);
var PicField:TBlobField;
    mm:TMemoryStream;
begin
  PicField:=CheckBlobField;
  if ExtFileName='' then
    PicField.Clear
  else begin
//    PicField.Clear;
    mm:=TMemoryStream.Create;
    mm.Write(extFileName[1],Length(ExtFileName));     //先把文件扩展名写入流
    if Assigned(Picture.Graphic) then
      Picture.Graphic.SaveToStream(mm);                //再把图片也写入流
    mm.Position:=0;
    PicField.LoadFromStream(mm);
    mm.Free;
  end;
end;
procedure TXImage.DataChange(Sender: TObject);
var PicField:TBlobField;
    mm:TMemoryStream;
      NewGraphic: TGraphic;
    GraphicClass: TGraphicClass;
begin
  PicField:=CheckBlobField;
  if PicField.IsNull then begin
    ExtFileName:='';
    Picture.Graphic:=nil;
  end
  else begin
    mm:=TMemoryStream.Create;
    PicField.SaveToStream(mm);
    mm.Position:=0;
    SetLength(ExtFileName,4);
    mm.Read(ExtFileName[1],4);                           //先读出扩展名
    GraphicClass := nil;                                 //再读出图片数据到图片中
    if (ExtFileName ='.WMF') or (ExtFileName='.EMF') then
      GraphicClass := TMetafile;
    if (ExtFileName='.ICO') then
      GraphicClass:=TIcon;
    if (ExtFileName='.BMP') then
      GraphicClass:=TBitmap;
    if (ExtFileName='.JPG') then
      GraphicClass:=TJPEGImage;
    if GraphicClass = nil then
      raise Exception.Create('无效的扩展名!');
    NewGraphic := GraphicClass.Create;
    NewGraphic.LoadFromStream(mm);
    Picture.Assign(NewGraphic);
    NewGraphic.Free;
    mm.Free;
  end;
end;
procedure TXImage.Loaded;
var MenuItem:TMenuItem;
begin
  inherited;
  if PopupMenu=nil then begin
    MyPopMenu:=TPopupMenu.Create(self);
    MenuItem:=TMenuItem.Create(MyPopMenu);
    MenuItem.Caption:='加载图片(&L)...';
    MenuItem.OnClick:=OnLoadMenuClick;
    MyPopMenu.Items.Add(MenuItem);
    MenuItem:=TMenuItem.Create(MyPopMenu);
    MenuItem.Caption:='删除图片(&D)...';
    MenuItem.OnClick:=OnDelMenuClick;
    MyPopMenu.Items.Add(MenuItem);
    PopupMenu:=MyPopMenu;
  end;
end;
procedure TXImage.OnLoadMenuClick(Sender: TObject);
begin
  LoadPicture();
end;
procedure TXImage.OnDelMenuClick(Sender: TObject);
begin
  DelPicture;
end;
procedure TXImage.LoadPicture(FileName: String);
var Dlg:TOpenDialog;
    Picfield:TBlobField;
begin
  Picfield:=CheckBlobField;
  FDataLink.Edit;
  if FDataLink.Editing then begin
    if FileName='' then begin
      Dlg:=TOpenDialog.Create(nil);
      Dlg.Filter:= '*.jpg|*.jpg|*.bmp|*.bmp|*.ico|*.ico';
      if dlg.Execute then
        FileName:=dlg.FileName;
      Dlg.Free;
    end;
    if FileName<>'' then begin
      Picture.LoadFromFile(FileName);
      ExtFileName:=UpperCase(ExtractFileExt(FileName));
      FDataLink.Modified;
      FDataLink.UpdateRecord;
    end;
  end;
end;
procedure TXImage.DelPicture;
var
    PicField:TBlobField;
begin
  Picfield:=CheckBlobField;
  FDataLink.Edit;
  if FDataLink.Editing then begin
    ExtFileName:='';
    Picture.Graphic:=nil;
    UpdateData(self);
  end;
end;
function TXImage.CheckBlobField: TBlobField;
begin
  if FDataLink.Active then
    if (FDataLink.Field is TBlobField) then begin
      Result:=TBlobField(FDataLink.Field);
      exit;
    end;
  Picture.Graphic:=nil;
  if FDataLink.Active then
    raise Exception.Create('DataField是BlobField才能正常工作!')
  else
    abort;
end;
procedure TXImage.DblClick;
begin
  LoadPicture();
  inherited;
end;


解决方案1:

顶楼主的开源精神~~~顶楼主的钻研精神~~~

解决方案2:

好强啊。。支持。

解决方案3:

又想起那个帖子了,呵呵

解决方案4:

呵呵,还记得以前你那篇惊天动地的贴子:)
代码没仔细看,因为除了在IDE中,真的不习惯在WEB中看代码,不整齐,
不过相信是好的

解决方案5:

楼上所言,的长贴在哪,~~~~仰慕呀~~~

解决方案6:

想当年那贴。。。真TMD长。。。。
现在认识了在知道OFFICE中的ACCESS其实是不如DELPHI之后
///////////
汗一个....

解决方案7:

呵呵,有点意思,看到你就又想起那个超长帖子了。

解决方案8:

佩服楼主的锲而不舍的求取精神.

解决方案9:

顶楼主的开源精神~~~顶楼主的钻研精神~~~

解决方案10:

顶楼主的开源精神~~~顶楼主的钻研精神~~~


以上介绍了“ 又回来了,经过半年的修行后写了DB加速器”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3227525.html

相关图片

相关文章