Показать полную графическую версию : Помощь по Visual Basic 2010 Express
mkw-best
08-04-2013, 15:39
Прошу помощи в создании программы для вывода на форме графических файлов. Чтобы при перемещении мыши объект двигался за курсором, а при нажатии оставался в данной позиции. Программа будет предназначена для создания простейших схем по электротехнике.
Программа будет предназначена для создания простейших схем по электротехнике. »
Если только для этого - чем Splan не устраивает? Сам давно его использую и нареканий нет.
Поскольку других предложений нет, выскажу свою точку зрения. Вся обработка перемещения объекта в событиях:
1. MouseDown - запоминаем первоначальные координаты курсора (X0:=X, Y0:=Y)
2. MouseMove - разрешаем перемещение объекта (True) и изменяет координаты левого верхнего угла объекта на величину сдвига курсора мыши
3. MouseUp - запрещаем перемещение объекта (False).
В событии OnDragOver (формы или панели) необходимо указать какие компоненты принимать для перемещения (Accept:=Source is TImage)
Свойство объекта DragMode=Automatic.
Как то так, должно работать и в VB, просто давно не пишу в VB.
посмотрите здесь - http://msdn.microsoft.com/ru-RU/vstudio/
еще хороший сайт - http://www.codeproject.com/Forums/1646/Visual-Basic.aspx
mkw-best
10-04-2013, 13:15
А можно элементарный пример. Я сделал перемещение объекта с помощью таймера. Но этот метод закрашивает всэ область в определенный цвет. И мышью устанавливаю в указанную область рисунок. Но этот метод мне не подойдет, потому что я не могу нарисовать еще один объект, т.к. стирается старый. А как ваш метод использовать, вернее как прописать маленько не понимаю. Не поможете?
В событии OnDragOver (формы или панели) необходимо указать какие компоненты принимать для перемещения (Accept:=Source is TImage)
Свойство объекта DragMode=Automatic.
Как то так, должно работать и в VB, просто давно не пишу в VB. »
А можно элементарный пример. »
Увы, для примера нужно установить VB, а пример в Delphi вам может ничего не дать!
// Автор: Михаил Христосенко
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button<>mbLeft then move:=false
else begin
move:=true;
x0:=x;
y0:=y;
rec:=image1.BoundsRect; //запоминаем контур картинки
end;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if move then begin
Form1.Canvas.DrawFocusRect(rec); //рисуем рамку
with rec do begin
left:=Left+x-x0;
top:=Top+y-y0;
right:=right+x-x0;
bottom:=bottom+y-y0;
x0:=x;
y0:=y; // изменяем координаты
end;
Form1.Canvas.DrawFocusRect(rec); // рисуем рамку на новом месте
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Form1.Canvas.DrawFocusRect(rec);
with image1 do begin
setbounds(rec.left+x-x0,rec.top+y-y0,width,height); //перемещаем картинку
move:=false;
end;
end;
Реализация должна зависеть от конечной цели проекта - построении произвольных схем или демонстрации каких-то стандартных.
В первом случае придется решать задачи динамического создания объектов из шаблона и привязки объектов к сетке на форме. Решать придется достаточно много, перемещение объектов отойдет на третий план, хотя даже эти процедуры можно решать по разному (сразу объект, сначала рамку - как в примере).
Во втором, все проще - создаете объекты (например, TShape), "строите" на форме или отдельных панелях из них схемы, по определенным событиям меняете или свойство Visible, или свойства Brush/Pen (здесь и таймер пригодится) - фактически демонстрируете работу схемы. Здесь все легко и наглядно. На второй вариант, меня навело ваше желание использовать таймер, ибо при реальном построении схемы он лишний. Может ошибаюсь.
Простой поиск по перемещению объектов в VB выдал следующее:
http://vbbook.ru/vb.net/peremeshenie-obekta-na-forme-s-pomoshu-mushi-na-vb-net/
http://www.programmersforum.ru/showthread.php?t=172497
http://www.sql.ru/forum/actualthread.aspx?bid=22&tid=953192&pg=2
http://www.vbfaq.ru/2008/09/kak-peremeshhat-image-myshyu/
mkw-best
11-04-2013, 03:27
Я сделал, что у меня запоминается картинка, и я вставляю следующую. Но пока меня что то не устраивает. А вам спасибо. Буду искать пути отказаться от таймера. Не нравиться мне с ним работать. Руки связывает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.