zoukankan      html  css  js  c++  java
  • 数据集和非数据感知控件使用

      1 unit frmMainUnit;
      2 
      3 interface
      4 
      5 uses
      6   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      7   jpeg, // 这里是一些手工的引用
      8   Dialogs, DB, ADODB, StdCtrls, DBCtrls, Mask, Grids, DBGrids, Buttons, Menus,
      9   ExtCtrls, ExtDlgs;
     10 
     11 type
     12   TfrmMain = class(TForm)
     13     ADOConnection1: TADOConnection;
     14     ADOQuery1: TADOQuery;
     15     DataSource1: TDataSource;
     16     DBGrid1: TDBGrid;
     17     DBEdit1: TDBEdit;
     18     DBComboBox1: TDBComboBox;
     19     Label1: TLabel;
     20     Label2: TLabel;
     21     DBEdit2: TDBEdit;
     22     Label3: TLabel;
     23     DBEdit3: TDBEdit;
     24     Label4: TLabel;
     25     DBEdit4: TDBEdit;
     26     Label5: TLabel;
     27     BitBtn1: TBitBtn;
     28     BitBtn2: TBitBtn;
     29     BitBtn3: TBitBtn;
     30     Label8: TLabel;
     31     Panel1: TPanel;
     32     Image1: TImage;
     33     PopupMenu1: TPopupMenu;
     34     A1: TMenuItem;
     35     N1: TMenuItem;
     36     B1: TMenuItem;
     37     N2: TMenuItem;
     38     C1: TMenuItem;
     39     p1: TOpenPictureDialog;
     40     p2: TSavePictureDialog;
     41     procedure FormCreate(Sender: TObject);
     42     procedure ADOQuery1AfterPost(DataSet: TDataSet);
     43     procedure ADOQuery1BeforeEdit(DataSet: TDataSet);
     44     procedure ADOQuery1NewRecord(DataSet: TDataSet);
     45     procedure BitBtn2Click(Sender: TObject);
     46     procedure BitBtn1Click(Sender: TObject);
     47     procedure BitBtn3Click(Sender: TObject);
     48     procedure A1Click(Sender: TObject);
     49     procedure ADOQuery1AfterScroll(DataSet: TDataSet);
     50     procedure B1Click(Sender: TObject);
     51     procedure C1Click(Sender: TObject);
     52     procedure Image1DblClick(Sender: TObject);
     53   private
     54     { Private declarations }
     55     function ShowImage(DataSet: TDataSet; FieldName: string; Image: TImage;
     56       Panel: TPanel): Boolean;
     57   public
     58     { Public declarations }
     59   end;
     60 
     61 var
     62   frmMain: TfrmMain;
     63 
     64 implementation
     65 
     66 {$R *.dfm}
     67 
     68 
     69 function TfrmMain.ShowImage(DataSet: TDataSet; FieldName: string; Image:
     70   TImage; Panel: TPanel): Boolean;
     71 var
     72   ms: TMemoryStream;
     73   JI: TJpegImage;
     74 begin
     75   ms := TMemoryStream.Create;
     76   JI := TJpegImage.Create;
     77   try
     78     try // 图片均以jpg格式保存,不支持使用dbimage,都在AfterScroll事件中读取。
     79       TBlobField(DataSet.FieldByName(FieldName)).SaveToStream(ms);
     80       if ms.Size > 0 then
     81       begin
     82         ms.Position := 0;
     83         JI.LoadFromStream(ms);
     84         Image.Picture.Bitmap.Assign(JI);
     85         if (Image.Picture.Bitmap.Width > 119) or (Image.Picture.Bitmap.Width >
     86           137) then
     87           Image.Stretch := True
     88         else
     89           Image.Stretch := false;
     90         Panel.Caption := '';
     91       end
     92       else
     93       begin
     94         Image.Picture := nil;
     95         Panel.Caption := '无照片';
     96       end;
     97     finally
     98       FreeAndNil(ms);
     99       FreeAndNil(JI);
    100     end;
    101     result := True;
    102   except
    103     result := false;
    104   end;
    105 end;
    106 
    107 procedure TfrmMain.A1Click(Sender: TObject);
    108 var
    109   ms: TMemoryStream;
    110   JI: TJpegImage;
    111 begin
    112   if not ADOQuery1.Active then
    113     exit;
    114   if p1.Execute then
    115   begin
    116     ms := TMemoryStream.Create;
    117     JI := TJpegImage.Create;
    118     try // 图片读取后都转换成jpg格式并压缩后保存到数据库中。
    119       if lowercase(ExtractFileExt(p1.FileName)) = '.bmp' then
    120       begin
    121         Image1.Picture.LoadFromFile(p1.FileName);
    122         JI.Assign(Image1.Picture.Bitmap);
    123       end
    124       else
    125       begin
    126         JI.LoadFromFile(p1.FileName);
    127         Image1.Picture.Bitmap.Assign(JI);
    128       end;
    129       JI.CompressionQuality := 75; // 图片压缩比,越低越不清楚。
    130       JI.Compress;
    131       JI.SaveToStream(ms);
    132       if not(ADOQuery1.State in dsEditModes) then
    133         ADOQuery1.Edit;
    134       TBlobField(ADOQuery1.FieldByName('fphoto')).LoadFromStream(ms);
    135       if (Image1.Picture.Bitmap.Width > 119) or (Image1.Picture.Bitmap.Height >
    136         137) then
    137         Image1.Stretch := True
    138       else
    139         Image1.Stretch := false;
    140       Panel1.Caption := '';
    141     finally
    142       FreeAndNil(ms);
    143       FreeAndNil(JI);
    144       JI.Free;
    145     end;
    146   end;
    147 end;
    148 
    149 procedure TfrmMain.ADOQuery1AfterPost(DataSet: TDataSet);
    150 begin // 保存或退出编辑状态时,显示为删除
    151   BitBtn2.Caption := '删除 &D';
    152 end;
    153 
    154 procedure TfrmMain.ADOQuery1AfterScroll(DataSet: TDataSet);
    155 begin
    156   ShowImage(ADOQuery1, 'fphoto', Image1, Panel1);
    157 end;
    158 
    159 procedure TfrmMain.ADOQuery1BeforeEdit(DataSet: TDataSet);
    160 begin // 进入编辑状态时,显示为取消
    161   BitBtn2.Caption := '取消 &D';
    162 end;
    163 
    164 procedure TfrmMain.ADOQuery1NewRecord(DataSet: TDataSet);
    165 begin // 这里处理新增
    166   ADOQuery1.FieldByName('fsex').AsString := '';
    167 end;
    168 
    169 procedure TfrmMain.B1Click(Sender: TObject);
    170 begin
    171   if not ADOQuery1.Active then
    172     exit;
    173   if ADOQuery1.State in dsEditModes then
    174     exit;
    175   if TBlobField(ADOQuery1.FieldByName('FPhoto')).IsNull then
    176     exit; // 如果图片为空,就没必要继续了
    177   if p2.Execute then
    178     if ExtractFileExt(p2.FileName) = '' then
    179       TBlobField(ADOQuery1.FieldByName('FPhoto'))
    180         .SaveToFile(p2.FileName + '.jpg')
    181     else
    182       TBlobField(ADOQuery1.FieldByName('FPhoto')).SaveToFile(p2.FileName);
    183 end;
    184 
    185 procedure TfrmMain.BitBtn1Click(Sender: TObject);
    186 begin
    187   ADOQuery1.Append;
    188 end;
    189 
    190 procedure TfrmMain.BitBtn2Click(Sender: TObject);
    191 begin
    192   if ADOQuery1.State in dsEditModes then
    193     ADOQuery1.Cancel
    194   else
    195     if Application.MessageBox('是否删除当前记录?', '提示信息', MB_OKCANCEL +
    196     MB_ICONQUESTION + MB_DEFBUTTON2) = IDOK then
    197     ADOQuery1.Delete;
    198   ShowImage(ADOQuery1, 'fphoto', Image1, Panel1);
    199 end;
    200 
    201 procedure TfrmMain.BitBtn3Click(Sender: TObject);
    202 begin
    203   ADOQuery1.Post;
    204 end;
    205 
    206 procedure TfrmMain.C1Click(Sender: TObject);
    207 begin
    208   if not ADOQuery1.Active then
    209     exit;
    210   if TBlobField(ADOQuery1.FieldByName('fphoto')).IsNull then
    211     exit;
    212   if MessageBox(Application.Handle, '是否清除照片?', '提示信息',
    213     MB_ICONQUESTION + MB_YESNO + MB_DEFBUTTON2) = IDNO then
    214     exit;
    215   Image1.Picture := nil;
    216   if not(ADOQuery1.State in dsEditModes) then
    217     ADOQuery1.Edit;
    218   TBlobField(ADOQuery1.FieldByName('fphoto')).Clear;
    219   ShowImage(ADOQuery1, 'fphoto', Image1, Panel1);
    220 end;
    221 
    222 procedure TfrmMain.FormCreate(Sender: TObject);
    223 begin
    224   with ADOQuery1 do
    225   begin
    226     close;
    227     sql.Text := 'select * from temployee';
    228     Open;
    229   end;
    230 end;
    231 
    232 procedure TfrmMain.Image1DblClick(Sender: TObject);
    233 var
    234   mPoint: TPoint;
    235 begin
    236   GetCursorPos(mPoint);
    237   PopupMenu1.Popup(mPoint.X, mPoint.Y);
    238 end;
    239 
    240 end.
  • 相关阅读:
    uva11059
    uva725
    程序中double类型的数输出为什么要用lf
    c++形参和实参同名时,如何单步执行观察形参的变化。
    台式机的字母键和数字键都不能正常使用了呢?
    找错误——下面的程序意图在于统计字符串中字符数1的个数,可惜有瑕疵
    初学者常见错误1——赋值时的类型转换
    scanf
    c++的调试与运行
    黑猫派对
  • 原文地址:https://www.cnblogs.com/CodeGear/p/5061866.html
Copyright © 2011-2022 走看看