Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Лабораторна робота №5
Створення проекту з використанням технології Drag&Drop та контекстних підказок
Лабораторна робота № 5
Створення проекту з використанням технології Drag&Drop та контекстних підказок
Мета: навчитися використовувати можливості технології Drag&Drop у прикладних програмах, додавати до програм контекстні підказки.
Порядок роботи:
Користуючись рекомендованою літературою до лабораторної роботи створити проект відповідно до індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком
назва роботи
мета роботи
порядок роботи
короткі теоретичні відомості
алгоритм розв’язку задачі
тексти відповідних модулів проекту
аналіз отриманих результатів та висновки
Питання для самоконтролю
1. У чому полягає технологія Drag&Drop? Наведіть приклади її застосування.
2. Які властивості та події об'єктів Delphi використовуються при програмуванні технології
Drag&Drop?
3. Яке призначення обробників подій OnDragOver та OnDragDrop?
4. Як перевірити можливість передачі інформації між об'єктами?
5. Що таке "контекстна підказка", як передбачити можливість доступу до неї в ужитку?
Теоретичні відомості
Технологія Drag&Drop
Технологія Drag&Drop полягає у використанні у Windows-програмах перетаскування за допомогою миші інформації з одного об'єкта (джерела) в інший (приймач). Можна переміщати файли між папками, переміщати самі папки і т. ін.
Усі властивості, методи та події, пов'язані з технологією Drag&Drop, визначені в класі TControl, що є базовим класом (прабатьком) усіх візуальних компонент Delphi. Тому вони є спільними для всіх компонент.
Контекстна підказка.
Контекстна підказка - це невелике віконце з текстом, яке з'являться за деякий час після наведення курсору миші на певний об'єкт на формі. Для різних об'єктів текст може бути різним, тому підказка називається контекстною.
Для створення такої підказки у програмі слід задати значення властивості Hint (рядкового типу) для відповідного об'єкта, а також установити у True значення його властивості ShowHint. Ці дії можна виконати як у процесі проектування так і програмно.
Завдання.
Написати програму, яка показує можливості технології Drag&Drop для заданих об'єктів - джерела та приймача. Необхідну інформацію для користувача програми оформити у вигляді контекстної підказки.
Варіанти завдання
ListBox ListBox.
ВИКОНАННЯ
КОД ПРОГРАМИ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Grids, ShellAPI, OleCtnrs, ImgList, Buttons,
DBGrids, Db, DBTables;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
Label3: TLabel;
Label4: TLabel;
procedure FormCreate(Sender: TObject);
procedure ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
i, j: integer;
s: string;
item: TListItem;
begin
DragAcceptFiles(Handle, true);
Randomize;
for i := 1 to 10 do
begin
s := '';
for j := 1 to 5 do
s := s + chr(Random(26) + 65);
listbox1.Items.add(s);
listbox2.items.add(IntToStr(random(1000)));
end;
end;
procedure TForm1.ListBox2DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source is TListBox) and ((Source as TListBox).ItemIndex >= 0);
end;
procedure TForm1.ListBox2DragDrop(Sender, Source: TObject; X, Y: Integer);
var
s: string;
begin
if Source = ListBox1 then
begin
ListBox2.Items.Add(ListBox1.Items[ListBox1.ItemIndex]);
ListBox1.Items.Delete(ListBox1.ItemIndex);
end
else
begin
s := ListBox2.Items[ListBox2.ItemIndex];
ListBox2.Items.Delete(ListBox2.ItemIndex);
ListBox2.Items.Insert(ListBox2.ItemAtPos(Point(X, Y), False), s);
end;
end;
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Source = ListBox2) and (ListBox2.ItemIndex >= 0);
end;
procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
i: integer;
begin
for i := 0 to ListBox2.Items.Count - 1 do
if (ListBox2.Selected[i]) and
(ListBox1.Items.IndexOf(ListBox2.Items[i]) < 0) then
ListBox1.Items.Add(ListBox2.Items[i]);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
DragAcceptFiles(Handle, False);
end;
end.