Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2010, 13:59   #1
Korsar chesti
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию Рисование стрелки с привязкой на объект

Здравствуйте уважаемые начинающие и опытные программисты!

Скажите пожалуйста в моей программе чертится прямоугольник при
помощи перетаскивания из панели компонентов (мною же созданный), как начертить между ними линию, с привязкой на эти прямоугольники?

И еще менее значимый вопросик: Как, например, при двойном нажатии на этот прямоугольник сделать так, чтобы открылась новая форма?

Внешний вид программы представлен во вложенных файлах.

Заранее огромное спасибо!
Изображения
Тип файла: jpg 2010-12-21_135317.jpg (29.9 Кб, 139 просмотров)
Тип файла: jpg 1.jpg (45.1 Кб, 135 просмотров)
Korsar chesti вне форума Ответить с цитированием
Старый 21.12.2010, 14:45   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

а как ты ети рамки создаеш? можно вписат в их событие движения что б перерисовывала или передвигало линию
Цитата:
Как, например, при двойном нажатии на этот прямоугольник сделать так, чтобы открылась новая форма?
раскажи о рамкеб ты на канве рисуеш?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 22.12.2010, 16:45   #3
Korsar chesti
 
Регистрация: 21.12.2010
Сообщений: 4
По умолчанию

Рамки нарисованы на канвасе, Вы правы! Вот часть листинга, думал он не понадобится...
Код:
procedure refreshCanvas;
var i,ii: integer;
  tb: nTextBox;
  cl: nClass;
begin
  form1.canv.canvas.brush.Color:=$EFF1F1;
  form1.canv.canvas.FillRect(rect(0,0,form1.canv.Width-1,form1.canv.Height-1));
  with form1.canv.Canvas do for i:=0 to length(nObjects)-1 do
  if (nObjects[i] is nTextBox) then begin
    tb:=(nObjects[i] as nTextBox);
    with tb do begin
      Brush.Style:=bsClear;
      pen.color:=$000000;
      Rectangle(tb.x1,tb.y1,tb.x2,tb.y2);
      textOut(tb.x1,tb.y1,tb.txt);
      //
      //обозначим активный объект:
      brush.Color:=$4040c0;
      pen.color:=brush.Color;
      if (aObject=tb) then for ii:=0 to 3 do
        case ii of
          0: Rectangle(tb.x1,tb.y1,tb.x1+selW,tb.y1+selH);
          1: Rectangle(tb.x2-selW,tb.y1,tb.x2,tb.y1+selH);
          2: Rectangle(tb.x1,tb.y2-selH,tb.x1+selW,tb.y2);
          3: Rectangle(tb.x2-selW,tb.y2-selH,tb.x2,tb.y2);
        end;
    end;
  end else if (nObjects[i] is nClass) then begin
    cl:=(nObjects[i] as nClass);
    with cl do begin
      Brush.Style:=bsClear;
      pen.color:=$000000;
      cl.y2:=cl.y1+nTbH;
      Rectangle(cl.x1,cl.y1,cl.x2,cl.y2);
      textOut(cl.x1,cl.y1,cl.name);
      //
      //перечислим атрибуты
      cl.y2:=cl.y2+nTbH*(length(cl.atrib) or 1);
      Rectangle(cl.x1,cl.y1,cl.x2,cl.y2);
      if (length(cl.atrib)=0) then
        textOut(cl.x1,cl.y1+nTbH,tNoAtr)
      else for ii:=0 to length(cl.atrib)-1 do
        textOut(cl.x1,cl.y1+nTbH*(1+ii),cl.atrib[ii]);
      //
      //перечислим атрибуты
      cl.y2:=cl.y2+nTbH*(length(cl.method) or 1);
      Rectangle(cl.x1,cl.y1,cl.x2,cl.y2);
      if (length(cl.method)=0) then
        textOut(cl.x1,cl.y1+nTbH*((length(cl.atrib) or 1)+1),tNoMet)
      else for ii:=0 to length(cl.method)-1 do
        textOut(cl.x1,cl.y1+nTbH*((length(cl.atrib) or 1)+1+ii),cl.method[ii]);
      //
      //обозначим активный объект:
      brush.Color:=$4040c0;
      pen.color:=brush.Color;
      if (aObject=cl) then for ii:=0 to 3 do
        case ii of
          0: Rectangle(cl.x1,cl.y1,cl.x1+selW,cl.y1+selH);
          1: Rectangle(cl.x2-selW,cl.y1,cl.x2,cl.y1+selH);
          2: Rectangle(cl.x1,cl.y2-selH,cl.x1+selW,cl.y2);
          3: Rectangle(cl.x2-selW,cl.y2-selH,cl.x2,cl.y2);
        end;
    end;
  end;
  form1.canv.Canvas.Refresh;
end;
При обращении к этой процедуре чертится фигура, фигура выделена в отдельный класс.

Екзешник программы скидываю тоже...

Спасибо за ответ и трату своего времени!
Вложения
Тип файла: rar NarcissProject.rar (187.7 Кб, 15 просмотров)
Korsar chesti вне форума Ответить с цитированием
Старый 22.12.2010, 17:00   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
И еще менее значимый вопросик: Как, например, при двойном нажатии на этот прямоугольник сделать так, чтобы открылась новая форма?
постав в OnMove того на чем рисуеш, границы координат, и если двоинои клик произоидет в нем открыват форму
Цитата:
как начертить между ними линию, с привязкой на эти прямоугольники?
с привязкой на эти прямоугольники?
Код:
procedure refresh(a, b:integer);
begin
//прировняи 1 угол к одному краю линии, а к другому краю, угол другои рамки
end;
а в коде напиши визде где передвигаеш обекты refresh(x,y);
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблоны - нужно создать объект класса abc в котором вместо aa использовался бы объект класса fff? Farrel Общие вопросы C/C++ 2 13.11.2010 17:37
Проблема с привязкой у word shollex Microsoft Office Word 1 22.09.2010 01:35
ЗАЩИТА ПО с привязкой к железу exetor Общие вопросы Delphi 3 18.09.2010 01:46
проблема с привязкой antn Microsoft Office Excel 2 14.01.2009 01:09
Помогите с привязкой Nesta1384 Microsoft Office Excel 2 26.09.2008 07:50