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;
6. МҚ-ын суреттермен толтыру үшін сонымен қатар әлемдегі елдердің
туларын ..\STUDENT\Заготовки\DataWorld папкасынан іздеуге болады.
4
4
-қадам.
-қадам.
–Drag&Drop
–Drag&Drop
технологиясы бойынша графикалық
технологиясы бойынша графикалық
файлдарды тасымалдау
файлдарды тасымалдау
.
.
Егер қолданушы проводниктен немесе біздің жобаға басқа
Егер қолданушы проводниктен немесе біздің жобаға басқа
программадан графикалық файлдарды тышқын арқылы тасымалдауға
программадан графикалық файлдарды тышқын арқылы тасымалдауға
мүмкіндік болса жақсы болар еді. Бұл тәсіл
мүмкіндік болса жақсы болар еді. Бұл тәсіл Windows технологиясы
бойынша «Drag and Drop» деп аталады.
Біз алгоритмді орындаймыз:
a) Формаға орналастырған файлдың атын анықтаймыз.
b)
«жіберу» кезіндегі тышқанның координаттарын анықтаймыз.
c) Бұл сәтте тышқан курсоры қай компонентте болғанын анықтаймыз.
d)
Берілген компонент файлды «қабылдай» алады ма дегенді
тексереміз.
e) Егер иа болса , онда файлды өңдеу үшін сәйкес әдісті шақырамыз.
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;
…………………………………………
3. 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;
4. Поместите текстовый курсор на заголовок процедуры 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;
5. Жобаны орындауға жіберіп және ярлыктарды жұмыс столынан
формаға тасымалдап, форманың атауында файлдың «дұрыс» аты және
тышқанның координаты дұрыс берілгеніне көз жеткізу керек.
6. Сонымен біз алгоритмнің 1) және 2) пункттерін орындадық .
Тышқанды «жіберу» болған компонентті анықтайық.
7. 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;
8. Жобаны қайтадан орындауға жіберіңіз және тасымалдау
аяқталғаннан кейін программа
DBImage компонентінің атының
дұрыстығы туралы хабар беретініне көз жеткізіңіз.
9. Бізге алгоритмнің d) және e) пункттерін іске асыру қалды. Жұмыс
сенімді болуы үшін қолданушыға .bmp кеңейтілуі бар файлдарды
тасымалдауға рұқсат береміз. Ол үшін мәтінге төменде қалың шрифтпен
берілген жолды қосып, (отладочную) жолды алып тастаңыз :
procedure TfmMain.WMDropFiles(var Msg: TMessage);
var j:integer;
R:TRect;
ctr:TControl;
dbIM:TDBImage;
begin
Достарыңызбен бөлісу: |