2-қадам . Қалқып шығатын менюінің тосқауыл және рұқсат
2-қадам . Қалқып шығатын менюінің тосқауыл және рұқсат
командалары.
командалары.
Мүмкін болатын рұқсат етілген командалары:
«Открыть» командасына әрқашан рұқсат етіледі.
«Вставить» командасына рұқсат етіледі, егер графикалық сурет
алмасу буферінде болған жағғдайда.
Ал қалған командаларға рұқсат етіледі, егер МҚ-ның сәйкес өрісінің
құрамында сурет болған жағдайда.
Меню пайда болатынның алдындағы
OnPopup жағдайын
қолданамыз. Онда МҚ-ның қай өрісінде тексерілетін берілгендер бар екенін
міндетті түрде анықтау керек:
1. Қолданылатын модульдер құрамына clipbrd. Модульін қосыңыз.
2. Отметьте на Формада ClipMenu компонентін белгілеңіз және
инспектора объект көмегімен OnPopup жағдайының төменде көрсетілген
өңдеушісін құрыңыз:
procedure TfmMain.MenuClipPopup(Sender: TObject);
var j:integer;
dbIM:TDBImage;
//Ссылка на компонент, из которого вызвано
меню
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;
3. Программаны жіберіп, оны тексеріңіз. Егер алмасу буферінде
графикалық сурет бар болса, онда қою командасы рұқсат етілген болып
есептеледі, ал басқа жағдайда тосқауыл қойылған болып есептеледі.
3
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;
4. Программаны орындауға жіберіңіз және «Открыть» командасының
жұмысын кез- келген сурет арқылы тексеріңіз.
5. 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
Достарыңызбен бөлісу: |