Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто может помочь!! 
:(
    Опции темы
masterdelphi
  Дата 23.5.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Кто может помочь!!Надо сделать такую процедуру или функцию!У меня на форме три кнопки Button и три Image,надо чтобы при нажатии на Button1 рисование происходило в Image1,при нажатии на Button2 рисование происходило в Image2 и т.д.,на каждом image цикл рисования одинаков, важна только реакция на конкретный Button!!   
PM MAIL   Вверх
D4rk
Дата 23.5.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.5.2006
Где: Самара

Репутация: нет
Всего: нет



1) Оформи цикл рисования как отдельную процедуру. В качестве параметра будет Image1, Image2 или Image3.

2) Напиши процедуры

TForm1.Button1Click
TForm2.Button1Click
TForm3.Button1Click

В них будешь вызывать процедуру рисования...

Или я чего-то не догоняю?  

Это сообщение отредактировал(а) D4rk - 23.5.2006, 23:46
PM MAIL ICQ   Вверх
masterdelphi
Дата 23.5.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Проблема в том что у меня 20 фигур для прорисовки и если для них писать по три процедуры рисования (для каждого Image) то получится 60 процедур, я хочу чтобы при нажатии на Button1,Button2,button3 загружалась одна и та же процедура(для одной фигуры) прорисовки но с разным Image(1,2,3-соответственно). 
PM MAIL   Вверх
skyboy
Дата 24.5.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



masterdelphi,по нажатию на кнопку что должно происходить? Выставляется какой-то признак, типа "номер текущего Image"? Тогда не проще ли сделать на checkbox'ax интерфейс? И по нажатию одной кнопки ты по состоянию checkbox'ов определяешь, где рисовать... А вообще - обрисуй пояснее картину... А то я тебе могу и про FindComponent в цикле рассказать, только знать бы ещё - надо оно тебе или нет... 
PM MAIL   Вверх
masterdelphi
Дата 24.5.2006, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Поясняю:
Обязательно надо с Button'ами и Image'ами. 
вот прога:

procedure ...
var...
begin...
и тут самое главное
with Image1.canvas do
begin
само рисование
end;
end;
надо чтобы вместо Image1 стояла переменная ,которой при выполнении процедуры:
procedure TForm1.Button1Click(Sender: TObject);присваивалось бы значение компонента Image1 
procedure TForm1.Button2Click(Sender: TObject);-Image2  
procedure TForm1.Button3Click(Sender: TObject);-Image3.
Где-то слышал что это делается в отдельной процедуре через вот эту вещь Sender: TObject.
Обязательно надо с Button'ами и Image'ами.

Добавлено @ 00:31 
FindComponent это по ходу та тема что надо... 
PM MAIL   Вверх
Sunvas
Дата 24.5.2006, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 7
Всего: 89



Код

procedure proc(imm:timage);
begin...
with imm.canvas do
begin
reactangle(0,0,50,50);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
proc(image1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
proc(image2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
proc(image3);
end;
 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
skyboy
Дата 24.5.2006, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



Пущай все твои button'ы имеют один обработчик событий: OnMyButtonClick.
Тогда... 
Код

procedure DrawOnMyImage(MyImage:TImage)
var...
begin
...
with MyImage.canvas do
begin
<само рисование>
end;

procedure OnMyButtonClick(Sender:TObject);
var n:i nteger;
      TenpImage: TImage;
begin
n:= StrToInt(copy((Sender as TButton).Name,7,length((Sender as TButton).Name)-6)); // определяем номер кнопки : Button2 -> 2, Button2048 -> 2048
TempImage:= FindComponent('Image' + IntToStr(n)) as TImage; // находим компонент Image типа TImage с таким же номером
DrawOnMyImage(TempImage); // передаём найденный Image как параметр в процедуру рисования
end;
 
PM MAIL   Вверх
masterdelphi
Дата 24.5.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Понял, работает.
Спасибо парни!!
 
PM MAIL   Вверх
masterdelphi
Дата 24.5.2006, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Кто знает как сделать так чтобы при движении(нажатии, перемещении, отпускании) курсора мыши его координаты считывались не с формы а с Image!!!
Поясню:

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
//координаты X и Y в этой процедуре это координаты на форме а мне надо на моем Image
end;
надо именно в этой процедуре!!! 
PM MAIL   Вверх
Yanis
Дата 24.5.2006, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 4
Всего: 111



masterdelphi
А тебя не смущает, что при движении над Image событие OnMouseMove у формы не срабатывает?  

Это сообщение отредактировал(а) Yanis - 24.5.2006, 09:04


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
masterdelphi
Дата 24.5.2006, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Я если честно этого не знал!!Т.Е.
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
действует только над формой и нет возможности сделать её относительно Image?? 
PM MAIL   Вверх
Yanis
Дата 24.5.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 4
Всего: 111



Цитата(masterdelphi @  24.5.2006,  10:05 Найти цитируемый пост)
и нет возможности сделать её относительно Image??  
Можно посчитать относительно чего угодно. Всё зависит от того в каком собитии ты будешь получать координаты.

Вообще есть один способ как определить положение курсора, когда он двигается над формой... Не знаю подойдёт ли он тебе. Вот:
Код
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure FrmMouseMove(var M: TWMNCHitTest); message WM_NCHITTEST;
  public
    { Public declarations }
  end;

{ ... }

procedure TForm1.FrmMouseMove(var M: TWMNCHitTest);
begin
  Inherited;
  Caption := Format('%d, %d', [M.XPos, M.YPos]);
end;
 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
masterdelphi
Дата 24.5.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Ситуация такая я должен по Image перемещать треугольник с помощью мыши. Для этого мне и нужны координаты на Image(чтобы определить попадает курсор в треугольник или нет)!!! 
PM MAIL   Вверх
Yanis
Дата 24.5.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 4
Всего: 111



А почему бы тогда не использовать OnMouseMove Image'а? Если ты не в курсе, то помимо функции Win API GetCursorPos существует глобальный объект Mouse с помощью которого можно узнать положение курсора на экране. Я не понимаю в чём загвоздка? smile Положение курсора относительно Image можно и так вычислить:
Код
function GetMPos(i: TImage): TPoint;
begin
  Result := i.ScreenToClient(Mouse.CursorPos);
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Caption := Format('%d, %d', [GetMPos(Image1).x, GetMPos(Image1).y]);
end;
 


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
masterdelphi
Дата 24.5.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Все догнал!!!!
Слушай а не скажешь как мне поставить условие для попадания курсора на фигуру(которую сам нарисовал в Image)? 
PM MAIL   Вверх
Yanis
Дата 24.5.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 4
Всего: 111



Поиском пользоваться умеешь? 
Код
{ **** UBPFD *********** by kladovka.net.ru ****
>> Проверка попадания точки в треугольник

Проверяет попадает ли точка P в треугольник ABC.
Вершины должны быть перечислены против часовой стрелки.

Зависимости: нет
Автор:       Fenik, [email protected], Новоуральск
Copyright:   Николай Федоровских
Дата:        8 октября 2004 г.
********************************************** }

function PtInTriang(const P, A, B, C: TPoint): Boolean;
{Внимание!! Вершины должны быть заданы против часовой стрелки!
        A
       / \
      / \
     B----C }
begin
  Result := False;
  if (P.x-A.x)*(A.y-B.y) - (P.y-A.y)*(A.x-B.x) >= 0 then
  if (P.x-B.x)*(B.y-C.y) - (P.y-B.y)*(B.x-C.x) >= 0 then
  if (P.x-C.x)*(C.y-A.y) - (P.y-C.y)*(C.x-A.x) >= 0 then
    Result := True;
end;
  

Это сообщение отредактировал(а) Yanis - 24.5.2006, 13:50


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
skyboy
Дата 24.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



можно воспользоваться Windows API функцией:
Цитата

The PtInRegion function determines whether the specified point is inside the specified region. 
BOOL PtInRegion(
    HRGN hrgn,    // handle of region 
    int X,    // x-coordinate of point  
    int Y  // y-coordinate of point  
   );    

Parameters
hrgn
Identifies the region to be examined. 
X
Specifies the x-coordinate of the point. 
Y
Specifies the y-coordinate of the point. 

Return Values
If the specified point is in the region, the return value is nonzero.
If the specified point is not in the region, the return value is zero. 
 
PM MAIL   Вверх
masterdelphi
Дата 24.5.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Очень важный вопрос:
У меня есть n-угольник нарисованный в image, для каждого пикселя n-угольника надо расчитать интенсивность освещения и выполнить закраску по алгоритму Гуро(если кто знает).n-угольник задается матрицей nx4.Где первые три столбца это x,y,z четвертый-нормировочный.
формулу для интенсивности я знаю в неё входят три переменных зависящих от координат конкретного пикселя.
Вопрос: как пробежаться по всем пикселям n-угольника вычислив для каждого пикселя и задав ему свою интенсивность ну скажем в макросе RGB(0,I,0), где I интенсивность конкретного пикселя

Добавлено @ 17:42 
?
 
PM MAIL   Вверх
masterdelphi
Дата 24.5.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Вообщем-то весь вопрос заключается в том чтобы взяв какой-то многоугольник поочерёдно вынимать из него координаты пикселей ему принадлежащих, проводить с ними математические операции, и присваивать пикселю с этими координатами определенное значение в макросе RGB(0,I,0)!!!!!!!! 
PM MAIL   Вверх
masterdelphi
Дата 25.5.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Поясню: алгоритм освещения надо проходить его в определенном порядке(алгоритм Гуро-интерполяция интенсивностей):
координаты освещаемого в данный момент пикселя это не координаты на самом Image т.е. я хочу сказать что у меня есть n-угольник в трёхмерном пространстве, для каждого пикселя(в смысле точки) этого многоугольника надо расчитать интенсивность используя его реальные координаты,далее это массив интенсивностей надо сохранить , выполнить операцию проецирования на Image и присвоить ранее расчитанные интенсивности уже спроецированным пикселям.
 
PM MAIL   Вверх
sergejzr
Дата 26.5.2006, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360





--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1127 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.