Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.07.2010, 11:11
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
Вопрос Работа с графикой

Доброго времени суток.Подскажите,как в программе создать графическую фигуру,соединённую линией с другой,при нажатии она должна менять цвет. И если выбираешь соединённую с ней, должны окрашиваться линии связи вместе с этими фигурами.Конкретно интересует как в canvas изменять изображения при их выборе.
Ответить с цитированием
  #2  
Старый 01.07.2010, 21:48
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Как говорится "если хочешь помочь бедняку то дай ему удочку а не рыбу"

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

Другой вариант. Анализируешь цвет пикселя по которому был клик и если он отличный от фона, перекрашиваешь все соседние пиксели и анализируешь соседние соседних и так цепная реакция :-)

Если надо будет могу попоже написать пример.
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #3  
Старый 01.07.2010, 22:11
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
По умолчанию

В canvas нашёл процедуру StyleChangedfSender(Tobject);-изменение объекта - может быть это можно как-то реализовать?Насчет TList не смог найти ничего подходящего,как я понял это класс для хранения объектов и их сортировка.
Пример был бы кстати, если возможно.
Ответить с цитированием
  #4  
Старый 01.07.2010, 22:17
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Цитата:
Сообщение от Pigmalion
В canvas нашёл процедуру StyleChangedfSender(Tobject);-изменение объекта - может быть это можно как-то реализовать?Насчет TList не смог найти ничего подходящего,как я понял это класс для хранения объектов и их сортировка.
Пример был бы кстати, если возможно.
Возможно только не седня завтро екзамен надо выспатся)
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #5  
Старый 02.07.2010, 09:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

PHP код:
unit Unit1;

interface

uses
  ExtCtrls
,
  
WindowsMessagesSysUtilsVariantsClassesGraphicsControlsForms;

type
  TForm1 
= class(TForm)
    
procedure FormCreate(SenderTObject);
  private
    
procedure PaintBoxPaint(SenderTObject);
    
procedure PaintBoxClick(SenderTObject);
    
procedure PaintBoxLinePaint(SenderTObject);
    
procedure PaintBoxLineClick(SenderTObject);
  public
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(SenderTObject);
var
  
paintboxTPaintBox;
  
x1y1x2y2Integer;
begin
  Randomize
;
  
// 1
  
paintbox:=TPaintBox.Create(Self);
  
paintbox.Parent:=Self;
  
paintbox.Left:=10;
  
paintbox.Top:=10;
  
paintbox.Color:=Random($ffffff);
  
paintbox.OnPaint:=PaintBoxPaint;
  
paintbox.OnClick:=PaintBoxClick;
  
x1:=paintbox.Left+paintbox.Width;
  
y1:=paintbox.Top;
  
// 2
  
paintbox:=TPaintBox.Create(Self);
  
paintbox.Parent:=Self;
  
paintbox.Left:=200;
  
paintbox.Top:=10;
  
paintbox.Color:=Random($ffffff);
  
paintbox.OnPaint:=PaintBoxPaint;
  
paintbox.OnClick:=PaintBoxClick;
  
x2:=paintbox.Left;
  
y2:=paintbox.Top+paintbox.Height;
  
// line
  
paintbox:=TPaintBox.Create(Self);
  
paintbox.Parent:=Self;
  
paintbox.Left:=x1;
  
paintbox.Top:=y1;
  
paintbox.Width:=x2-x1;
  
paintbox.Height:=y2-y1;
  
paintbox.Color:=Random($ffffff);
  
paintbox.OnPaint:=PaintBoxLinePaint;
  
paintbox.OnClick:=PaintBoxLineClick;
end;

procedure TForm1.PaintBoxPaint(SenderTObject);
var
  
paintboxTPaintBox;
begin
  paintbox
:=TPaintBox(Sender);
  
paintbox.Canvas.Pen.Color:=paintbox.Color;
  
paintbox.Canvas.FillRect(paintbox.ClientRect);
end;

procedure TForm1.PaintBoxClick(SenderTObject);
var
  
paintboxTPaintBox;
begin
  paintbox
:=TPaintBox(Sender);
  
paintbox.Color:=Random($ffffff);
  
paintbox.Invalidate;
end;

procedure TForm1.PaintBoxLinePaint(SenderTObject);
var
  
paintboxTPaintBox;
begin
  paintbox
:=TPaintBox(Sender);
  
paintbox.Canvas.Pen.Color:=paintbox.Color;
  
paintbox.Canvas.Pen.Width:=4;
  
paintbox.Canvas.MoveTo(paintbox.ClientRect.Leftpaintbox.ClientRect.Top);
  
paintbox.Canvas.LineTo(paintbox.ClientRect.Rightpaintbox.ClientRect.Bottom);
end;

procedure TForm1.PaintBoxLineClick(SenderTObject);
var
  
iInteger;
  
paintboxTPaintBox;
  
cTColor;
begin
  paintbox
:=TPaintBox(Sender);
  if 
paintbox.Canvas.Pixels[paintbox.ScreenToClient(Mouse.CursorPos).Xpaintbox.ScreenToClient(Mouse.CursorPos).Y]=paintbox.Color then
  begin
    c
:=Random($ffffff);
    for 
i:=0 to ComponentCount-do
    
begin
      
if Components[iis TPaintBox then
      begin
        paintbox
:=TPaintBox(Components[i]);
        
paintbox.Color:=c;
        
paintbox.Invalidate;
      
end;
    
end;
  
end;
end;

end
http://data.cod.ru/62299
Ответить с цитированием
  #6  
Старый 02.07.2010, 20:51
Pigmalion Pigmalion вне форума
Прохожий
 
Регистрация: 01.07.2010
Сообщения: 20
Репутация: 10
По умолчанию

Благодарю NumLock.Надо попробовать.
А как можно сменить одно изображение (bmp) на другое при щелчке на него?
Ответить с цитированием
  #7  
Старый 03.07.2010, 09:59
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025