Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 830
∙ повысить рейтинг »
Jimhucksly
Статус: 5-й класс
Рейтинг: 796
∙ повысить рейтинг »
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 495
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Номер выпуска:1443
Дата выхода:10.10.2009, 16:30
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:576 / 207
Вопросов / ответов:2 / 2

Вопрос № 172891: В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий(телевизор, радиоприемник и т. п.),марку изделия, дату приемки в ремонт, состояние готовности заказа (выпо...


Вопрос № 172927: Уважаемые эксперты. Помогите решить задачу. В программу загружается несколько графических файлов (jpg или png). На форме они должны выглядеть превьюхами (к примеру по 180 pt). Необходимо реализовать drag-and-drop между этими превьюхами, чтобы при ...

Вопрос № 172891:

В радиоателье хранятся квитанции о сданной в ремонт радиоаппаратуре. Каждая квитанция содержит следующую информацию: наименование группы изделий(телевизор, радиоприемник и т. п.),марку изделия, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о состоянии заказов на текущие сутки по группам изделий. Есть пример как должно выглядеть это все, надо переделать под задания.Пример

Отправлен: 04.10.2009, 16:14
Вопрос задал: Bel9illi, 1-й класс
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/Genia007/, Студент :
Здравствуйте, Bel9illi.
Вот посмотрите что у меня получилось, возможно программа Вам подойдёт.

Приложение:
Прикрепленный файл: загрузить »

-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/, Студент
Ответ отправлен: 04.10.2009, 20:13

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254997 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 172927:

    Уважаемые эксперты. Помогите решить задачу.
    В программу загружается несколько графических файлов (jpg или png). На форме они должны выглядеть превьюхами (к примеру по 180 pt). Необходимо реализовать drag-and-drop между этими превьюхами, чтобы при перетаскивании одной на другую они менялись местами. Заранее спасибо.

    Отправлен: 05.10.2009, 17:05
    Вопрос задал: Maximus777, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает Евгений/Genia007/, Студент :
    Здравствуйте, Maximus777.
    Вот могу Вам предложить следующий код, который реализует Вашу задачу между тремя image, при необходимости несложно переделать на любое количество картинок:
    Код:
    unit Unit7;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, jpeg;

    type
    TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftSta te; X, Y: Integer);
    procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    procedure Image2MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Image3MouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    procedure Image3MouseMove(Sender: TObject; Shift: TShiftState; X,
    Y: Integer);
    procedure Image3MouseUp(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    move: boolean;
    X0, Y0, X1, Y1: Integer;
    rec, rect1, rect2, rect3: Trect;

    implementation

    {$R *.dfm}

    proce dure TForm1.FormCreate(Sender: TObject);
    begin
    rect1:= Image1.BoundsRect;
    rect2:= Image2.BoundsRect;
    rect2:= Image2.BoundsRect;
    end;

    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 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное