Вопрос № 172891: В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий(телевизор, радиоприемник и т. п.),марку изделия, дату приемки в ремонт, состояние готовности заказа (выпо...
Вопрос № 172927: Уважаемые эксперты. Помогите решить задачу. В программу загружается несколько графических файлов (jpg или png). На форме они должны выглядеть превьюхами (к примеру по 180 pt). Необходимо реализовать drag-and-drop между этими превьюхами, чтобы при ...
Вопрос № 172891:
В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий(телевизор, радиоприемник и т. п.),марку изделия, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о состоянии заказов на текущие сутки по группам изделий. Есть пример как должно выглядеть это все, надо переделать под задания.Пример
Ответ отправил: Евгений/Genia007/, Студент
Ответ отправлен: 04.10.2009, 20:13
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 254997
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 172927:
Уважаемые эксперты. Помогите решить задачу. В программу загружается несколько графических файлов (jpg или png). На форме они должны выглядеть превьюхами (к примеру по 180 pt). Необходимо реализовать drag-and-drop между этими превьюхами, чтобы при перетаскивании одной на другую они менялись местами. Заранее спасибо.
Отвечает Евгений/Genia007/, Студент :
Здравствуйте, Maximus777. Вот могу Вам предложить следующий код, который реализует Вашу задачу между тремя image, при необходимости несложно переделать на любое количество картинок:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then exit; X0:= X; Y0:= Y; X1:= Image1.Left; Y1:= Image1.Top; rec := (Sender as TControl).BoundsRect; move := true; end;
procedure TForm1.Image1MouseMove(Sender:
TObject; Shift: TShiftState; X, Y: Integer); begin if not move then exit; with rec do begin left := left + X - X0; right := right + X - X0; top := top + Y - Y0; bottom := bottom + Y - Y0; X0 := X; Y0 := Y; end; end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin move := fals
e; if ((rec.Left >= rect2.Left) and (rec.Left <= rect2.Right) and (rec.Bottom >= rect2.Top) and (rec.Top <= rect2.Bottom)) OR ((rec.Right >= rect2.Left) and (rec.Right <= rect2.Right) and (rec.Bottom >= rect2.Top) and (rec.Top <= rect2.Bottom)) then begin image2.Left:= X1; image2.Top:= Y1; image1.Left:= rect2.Left; image1.Top:= rect2.Top; end else if ((rec.Left >= rect3.Left) and (rec.Left <= rect3.Right)
and (rec.Bottom >= rect3.Top) and (rec.Top <= rect3.Bottom)) OR ((rec.Right >= rect3.Left) and (rec.Right <= rect3.Right) and (rec.Bottom >= rect3.Top) and (rec.Top <= rect3.Bottom)) then begin image3.Left:= X1; image3.Top:= Y1; image1.Left:= rect3.Left; image1.Top:= rect3.Top; end; rect1:= image1.BoundsRect; rect2:= image2.BoundsRect; rect3:= image3.BoundsRect; en
d;
procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin i
f Button <> mbLeft then exit; X0:= X; Y0:= Y; X1:= Image2.Left; Y1:= Image2.Top; rec := (Sender as TControl).BoundsRect; move := true; end;
procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not move then exit; with rec do begin left := left + X - X0; right := right + X - X0; top := top + Y - Y0; bottom := bottom + Y - Y0; X0 :=
X; Y0 := Y; end; end;
procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin move := false; if ((rec.Left >= rect1.Left) and (rec.Left <= rect1.Right) and (rec.Bottom >= rect1.Top) and (rec.Top <= rect1.Bottom)) OR ((rec.Right >= rect1.Left) and (rec.Right <= rect1.Right) and (rec.Bottom >= rect1.Top) and (rec.Top <= rect1.Bottom)) then
begin image1.Left:= X1; image1.Top:= Y1; image2.Left:= rect1.Left; image2.Top:= rect1.Top; end else if ((rec.Left >= rect3.Left) and (rec.Left <= rect3.Right) and (rec.Bottom >= rect3.Top) and (rec.Top <= rect3.Bottom)) OR ((rec.Right >= rect3.Left) and (rec.Right <= rect3.Right) and (rec.Bottom >= rect3.Top) and (rec.Top <= rect3.Bottom)) then begin image3.Left:= X1; image3.Top:= Y1;
image2.Left:= rect3.Left; image2.Top:= rect3.Top; end; rect1:= image1.BoundsRect; rect2:= image2.BoundsRect; rect3:= image3.BoundsRect; end;
procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button <> mbLeft then exit; X0:= X; Y0:= Y; X1:= Image3.Left; Y1:= Image3.Top; rec := (Sender as TControl).Boun
dsRect; move := true; end;
procedure TForm1.Image3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not move then exit; with rec do begin left := left + X - X0; right := right + X - X0; top := top + Y - Y0; bottom := bottom + Y - Y0; X0 := X; Y0 := Y; end; end;
procedure TForm1.Image3MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y:
Integer); begin move := false; if ((rec.Left >= rect1.Left) and (rec.Left <= rect1.Right) and (rec.Bottom >= rect1.Top) and (rec.Top <= rect1.Bottom)) OR ((rec.Right >= rect1.Left) and (rec.Right <= rect1.Right) and (rec.Bottom >= rect1.Top) and (rec.Top <= rect1.Bottom)) then begin image1.Left:= X1; image1.Top:= Y1; image3.Left:= rect1.Left; image3.Top:= rect1.Top; end els
e if ((rec.Left >= rect2.Left) and (rec.Left <= rect2.Right) and (rec.Bottom >= rect2.Top) and (rec.Top <= rect2.Bottom)) OR ((rec.Right >= rect2.Left) and (rec.Right <= rect2.Right) and (rec.Bottom >= rect2.Top) and (rec.Top <= rect2.Bottom)) then begin image2.Left:= X1; image2.Top:= Y1; image3.Left:= rect2.Left; image3.Top:= rect2.Top; end; rect1:= image1.BoundsRect; rect2:= image2.BoundsRect;
rect3:= image3.BoundsRect; end;
end.
Код работает следующим образом: когда нажимается кнопка мыши запоминается положение соответствующей картинки на форме; во время переноса картинки происходит передвижение рамки, а не самой картинки для отсутствия мерцаний; после отпускания кнопки мыши происходит перемещение картинки и проверка на какую картинку произошло перемещение после чего эта картинка перемещается на место картинки, которую только
что двигали.
Исправлен код по просьбе автора
-----
∙ Отредактировал: Лысков Игорь Витальевич, Модератор
∙ Дата редактирования: 06.10.2009, 04:11 (время московское)
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/, Студент
Ответ отправлен: 05.10.2009, 16:52
Оценка ответа: 4 Комментарий к оценке: Осталось сделать загруз и ресайз имиджей на форму. И определение положения перетаскиваемой картинки сделать менее точным, чтобы не метить прям на кртинку.
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 255034
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.