1 –шi зертханалық жұмыс Тақырыбы: «Қойма» деректер қорын басқару жүйесін құру Зертханалық жұмыстың мақсаты


nmField:string; //Имя поля БД, с которым связан компонент



бет14/18
Дата08.06.2018
өлшемі2 Mb.
#41782
1   ...   10   11   12   13   14   15   16   17   18

nmField:string; //Имя поля БД, с которым связан компонент

tmf:TMemoField; //Ссылка на поле БД, с которым связан компонент

begin


nmField:=''; dbIM:=nil;

// Запрет – разрешение пунктов меню:

With MenuClip do begin

Items[1].Enabled := Clipboard.HasFormat(CF_PICTURE); //Вставка

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

nmField:=dbIM.DataField;

tmf:=dbIM.DataSource.DataSet.FieldByName(nmField) as TMemoField;

if tmf<>nil then begin

if tmf.BlobSize>0 then Items[2].Enabled :=True

else Items[2].Enabled :=False; //Копирование

Items[3].Enabled :=Items[2].Enabled; //Вырезка

Items[4].Enabled :=Items[2].Enabled; //Сохранение

Items[5].Enabled :=Items[2].Enabled; //Очистка

end;

end;

//Присвоить номера картинок для пунктов меню:

for j:=0 to Items.Count -1 do

if Items[j].Enabled then Items[j].ImageIndex:=2*j

else Items[j].ImageIndex:=2*j+1;

end;

end;



  1. Программаны жіберіп, оны тексеріңіз. Егер алмасу буферінде графикалық сурет бар болса, онда қою командасы рұқсат етілген болып есептеледі, ал басқа жағдайда тосқауыл қойылған болып есептеледі.

3-қадам. Қалқып шығатын меню командаларын программалау.

  1. Формаға Dialogs терезесінен OpenPictureDialog және SavePictureDialog, компоненттерін орналастырыңыз, содан кейін олардың Name қасиетіне dlgOpenImage және dlgSaveImage мағыналарын меншіктеңіз..

  2. Дизайнер менюінде щелкните по пункту «Открыть» пункті бойынша шертіп, төменде көрсетілген процедураны құрыңыз:

  3. procedure TfmMain.mcOpenClick(Sender: TObject);

var dbIM:TDBImage;

begin


if Not(dlgOpenImage.Execute) then Exit;

dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

if dbIM.DataSource.State <> dsEdit then dbIM.DataSource.Edit;

dbIM.Picture.LoadFromFile(dlgOpenImage.FileName);

dbIM.DataSource.DataSet.Post;

end;

end;


  1. Программаны орындауға жіберіңіз және «Открыть» командасының жұмысын кез- келген сурет арқылы тексеріңіз.

  2. 2-ші пункттегідей етіп менюдің басқа пункттері үшін төменде көрсетілген процедураны құрыңыз:

procedure TfmMain.mcPasteClick(Sender: TObject);



var dbIM:TDBImage;

begin


dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

try

dbIm.PasteFromClipboard;

dbIM.DataSource.DataSet.Post;

except

ShowMessage('Буфер не содержит необходимый рисунок.');

end;

end;

end;
procedure TfmMain.mcPasteClick(Sender: TObject);



var dbIM:TDBImage;

begin


if Not(Clipboard.HasFormat(CF_PICTURE)) then Exit;

dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

try

dbIm.PasteFromClipboard;

dbIM.DataSource.DataSet.Post;

except

ShowMessage('Ошибка сохранения рисунка.');

end;

end;

end;
procedure TfmMain.mcCopyClick(Sender: TObject);



var dbIM:TDBImage;

begin


dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then dbIM.CopyToClipboard;

end;
procedure TfmMain.mcCutClick(Sender: TObject);



var dbIM:TDBImage;nmField:string;

begin


dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

dbIM.CutToClipboard;nmField:=dbIM.DataField;

if dbIM.DataSource.State <> dsEdit then dbIM.DataSource.Edit;

dbIM.DataSource.DataSet.FieldByName(nmField).Clear;

dbIM.DataSource.DataSet.Post;

end;

end;
procedure TfmMain.mcSaveClick(Sender: TObject);



var dbIM:TDBImage;

begin


if Not(dlgSaveImage.Execute) then Exit;

dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

try

if dbIm<>nil then dbIM.Picture.SaveToFile(dlgSaveImage.FileName);

except

ShowMessage('Ошибка записи в файл:'+#13#10+dlgSaveImage.FileName);

end;

end;
procedure TfmMain.mcClearClick(Sender: TObject);



var dbIM:TDBImage;nmField:string;

begin


dbIm:=nil;

With MenuClip do

if PopupComponent is TDBImage then dbIM:=(PopupComponent as TDBImage);

if dbIm<>nil then begin

nmField:=dbIM.DataField;

if dbIM.DataSource.State <> dsEdit then dbIM.DataSource.Edit;

dbIM.DataSource.DataSet.FieldByName(nmField).Clear;

dbIM.DataSource.DataSet.Post;

end;

end;



  1. МҚ-ын суреттермен толтыру үшін сонымен қатар әлемдегі елдердің туларын ..\STUDENT\Заготовки\DataWorld папкасынан іздеуге болады.


4-қадам. –Drag&Drop технологиясы бойынша графикалық файлдарды тасымалдау.

Егер қолданушы проводниктен немесе біздің жобаға басқа программадан графикалық файлдарды тышқын арқылы тасымалдауға мүмкіндік болса жақсы болар еді. Бұл тәсіл Windows технологиясы бойынша «Drag and Drop» деп аталады.

Біз алгоритмді орындаймыз:



  1. Формаға орналастырған файлдың атын анықтаймыз.

  2. «жіберу» кезіндегі тышқанның координаттарын анықтаймыз.

  3. Бұл сәтте тышқан курсоры қай компонентте болғанын анықтаймыз.

  4. Берілген компонент файлды «қабылдай» алады ма дегенді тексереміз.

  5. Егер иа болса , онда файлды өңдеу үшін сәйкес әдісті шақырамыз.




  1. Қолданылатын модульдер тізіміне ShellAPI модульін қосыңыз.

  2. Форманың модульінің private және public кілттік сөздерінің арасына

қалың шрифтпен ерекшеленген мәтінді орналастырыңыз:

……………………………………….

private

{ Private declarations }



drFile: array[0..256] of char;

XYPoint:TPoint;

nmComp:string;

protected

procedure WMDropFiles (var Msg: TMessage);message wm_DropFiles;

public


{ Public declarations }

end;


…………………………………………

  1. OnCreate формасының өңдеушісіне төменде қалың шрифтпен берілген жолды қосыңыз:

procedure TfmMain.FormCreate(Sender: TObject);

var sbase:string;

begin

sbase:=FindFileBD('BDMyWorld.mdb','MyWorld.INI',ConStr,dlgBD);



if sbase<>'' then begin

ADOQuery1.Active :=False;

ADOQuery1.ConnectionString :=ConStr;

ADOQuery1.Active :=True;

NameSortField:=DBGrid1.Columns[0].FieldName;Desc:=False;

NewQuerySQL;

end else Application.Terminate;

Application.HintPause :=0;



DragAcceptFiles(Handle,True);

end;


  1. Поместите текстовый курсор на заголовок процедуры WMDropFiles процеурасының атауына мәтіндік курсорды орналастырыңыз.. Бірдей уақытта CTRL+SHIFT+C –ті басыңыз. Delphi төменде көрсетілген шаблонды құрады.Осыған қалың шрифтпен ерекшеленген жолды теріңіз:

procedure TfmMain.WMDropFiles(var Msg: TMessage);

begin

DragQueryFile(THandle(Msg.WParam),0,drFile,SizeOf(drFile));

DragQueryPoint(THandle(Msg.WParam),XYPoint);

DragFinish(THandle(Msg.WParam));

//Отладочная строка:

Caption:= String(drFile)+'-'+IntToStr(XYPoint.x)+'-'+IntToStr(XYPoint.y);

end;


  1. Жобаны орындауға жіберіп және ярлыктарды жұмыс столынан формаға тасымалдап, форманың атауында файлдың «дұрыс» аты және тышқанның координаты дұрыс берілгеніне көз жеткізу керек.

  2. Сонымен біз алгоритмнің 1) және 2) пункттерін орындадық . Тышқанды «жіберу» болған компонентті анықтайық.

  3. WMDropFiles процедурасына қалың шрифтпен ерекшеленген жолдарды қосыңыз және (отладочную) жолды төмендегідей етіп өзгертіңіз:

procedure TfmMain.WMDropFiles(var Msg: TMessage);

var j:integer;

R:TRect;

ctr:TControl;

begin


nmComp:=''; ctr:=nil;

DragQueryFile(THandle(Msg.WParam),0,drFile,SizeOf(drFile));

DragQueryPoint(THandle(Msg.WParam),XYPoint);

DragFinish(THandle(Msg.WParam));



for j := 0 to ComponentCount-1 do begin

if (Components[j] is TDBImage) then begin

ctr:= Components[j] as TControl;

R.Left :=ctr.Left+paLeft.Left;R.Top :=ctr.Top+paLeft.Top;

R.Right := R.Left+ctr.ClientWidth;R.Bottom :=R.Top+ctr.ClientHeight;

With R do

if (XYPoint.x >Left) and(XYPoint.x

(XYPoint.y >Top) and(XYPoint.y

nmComp:= ctr.Name;Break;

end;

end;

end;

if nmComp<>'' then ShowMessage(nmComp);

//Отладочная строка:

fmMain.Caption:= IntToStr(XYPoint.x)+'-'+IntToStr(XYPoint.y)+' / '+

IntToStr(R.Left)+'-'+IntToStr(R.Top)+'-'+

IntToStr(R.Right)+'-'+IntToStr(R.Bottom);

end;

  1. Жобаны қайтадан орындауға жіберіңіз және тасымалдау аяқталғаннан кейін программа DBImage компонентінің атының дұрыстығы туралы хабар беретініне көз жеткізіңіз.

  2. Бізге алгоритмнің d) және e) пункттерін іске асыру қалды. Жұмыс сенімді болуы үшін қолданушыға .bmp кеңейтілуі бар файлдарды тасымалдауға рұқсат береміз. Ол үшін мәтінге төменде қалың шрифтпен берілген жолды қосып, (отладочную) жолды алып тастаңыз :

procedure TfmMain.WMDropFiles(var Msg: TMessage);

var j:integer;

R:TRect;

ctr:TControl;



dbIM:TDBImage;

begin


nmComp:='';ctr:=nil;dbIm:=nil;

DragQueryFile(THandle(Msg.WParam),0,drFile,SizeOf(drFile));

DragQueryPoint(THandle(Msg.WParam),XYPoint);

DragFinish(THandle(Msg.WParam));

for j := 0 to ComponentCount-1 do begin

if (Components[j] is TDBImage) then begin

ctr:= Components[j] as TControl;

R.Left :=ctr.Left+paLeft.Left;R.Top :=ctr.Top+paLeft.Top;

R.Right := R.Left+ctr.ClientWidth;R.Bottom :=R.Top+ctr.ClientHeight;

With R do

if (XYPoint.x >Left) and(XYPoint.x

(XYPoint.y >Top) and(XYPoint.y

nmComp:= ctr.Name;Break;

end;


end;

end;


if nmComp<>'' then begin

dbIM:=ctr As TDBImage;

if not(dbIm is TDBImage) then Exit;

if dbIM=nil then Exit;

if not(ExtractFileExt(drFile)='.bmp') then Exit;

try

if dbIM.DataSource.State <> dsEdit then dbIM.DataSource.Edit;

dbIM.Picture.LoadFromFile(drFile);

dbIM.DataSource.DataSet.Post;

except

ShowMessage('Ошибка записи в БД изображения из файла:'+#13#10+drFile);

end;

end;

end;

  1. Әртүрлі нақты суреттерді формаға тасымалдау программасының жұмысын тексеріңіз:


17-сурет – Іске қосқанда шығатын терезе


Достарыңызбен бөлісу:
1   ...   10   11   12   13   14   15   16   17   18




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет