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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2007, 17:27   #1
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию пара вопросов по кнопкам

1
В моей программе при щелчке по изображению происходит перемещение линии на один пиксел вверх (и так 400 раз).
Код:
procedure TForm1.Image12Click(Sender: TObject);
begin
Label15.Caption :=IntToStr(cursor_d);

if cursor > 48 then
with Canvas do
    begin

    cursor :=cursor-cursor_d ;
    Form1.Refresh;
    Canvas.Pen.Color :=clBlack ;
    Canvas.MoveTo(5,cursor); Canvas.LineTo(400,cursor);

    point :=point+1 ;

     if point=1 then begin point_value :=p01; end;
     if point=2 then begin point_value :=p02; end;
     .........
     if point=400 then begin point_value :=p400; end;

     Label13.Caption :=IntToStr(point)  ;
     Label14.Caption :=IntToStr(point_value)  ;
    end;
end;
Вопрос: как сделать что бы линия перемещалась постоянно при нажатии и удержании левой кнопки мыши ?

2
Хотел использовать вместо изображения кнопку SpeedButton, но в сети ничего конкретного по её применению не нашёл (всё поверхностно, типа "а вот ещё есть такая кнопка..."). Есть у кого ссылка на пример, а лучше описание работы со SpeedButton-ом? Или код с её использованием?
grey вне форума Ответить с цитированием
Старый 11.11.2007, 18:02   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

1. Производите обработку событий OnMouseDown/OnMouseUp.
По MouseDown запускайте таймер (если вам нужен интервал между сдвигами линии, в этом случае по MouseUp таймер останавливаете) или просто выполняйте в цикле процедуру сдвига.
2. Не понял про SpeedButton. Вы ее хотите использовать в качестве объекта для нажимания мышкой вместо картинки в первом примере? Тогда в чем трудность?
Далее.
Не понял смысла ваших 400 строк:
Код:
if point=1 then begin point_value :=p01; end;
     if point=2 then begin point_value :=p02; end;
     .........
     if point=400 then begin point_value :=p400; end;
Но в любом случае:
Код:
if point=1 then point_value :=p01 else
     if point=2 then point_value :=p02 else
     .........
     if point=400 then point_value :=p400;
Иначе вы каждый раз заставляете программу анализировать все заведомо невыполняемые условия (выполняется-то только одно из них).
Я уже не говорю о том, что здесь, скорее всего, должен быть (а может и вовсе не нужен) простенький цикл.

Последний раз редактировалось mihali4; 11.11.2007 в 18:11.
mihali4 вне форума Ответить с цитированием
Старый 11.11.2007, 18:13   #3
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

(Пока я тут думал, меня уже опередили )

Думаю здесь нужно делать через таймер.
В таймер надо засунуть процедуру перемещения линии, не забыть настроить интервал (в милесекундах).
События кнопок, которые нужно использовать onMouseDown (нажатие мыша) и онМоусАп (отпускание мыша) в них записать процедуры активации и деактивации таймера

Код
procedure TForm1.SpeedButton1MouseDown(Sender : TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
timer1.Enabled:=true;
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
timer1.Enabled:=false;
end;
Никому не верьте.

Последний раз редактировалось Rapid; 11.11.2007 в 18:17.
Rapid вне форума Ответить с цитированием
Старый 11.11.2007, 19:01   #4
grey
Пользователь Подтвердите свой е-майл
 
Регистрация: 24.10.2007
Сообщений: 36
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не понял про SpeedButton. Вы ее хотите использовать в качестве объекта для нажимания мышкой вместо картинки в первом примере? Тогда в чем трудность?
Трудность в том, что не могу грамотно привязать к этой кнопке картинку *.bmp. Там помоему какие-то координаты нужно прописывать... Я раньше делал SpeedButton для меню автозапуска дисков, но там другой синтаксис был...

Цитата:
Код:
if point=1 then point_value :=p01 else
Спасибо за подсказку. Учту
А смысл 400 строк в том, сначала считывается с ини-файла график, а потом возможно будет необходимость просмотреть какой точке какое значение соответствует (я первый раз сделал вообще через одну переменную и почти в две строки, а потом задал вопрос на этом форуме, можно ли считать координаты точек по уже нарисованному, но это оказалось геморойнее, чем ввести 400 переменных. Тем более, возможно в последствии будет реализована идея построения графика прямо в моей программе, используя "мастер-точки" и разные виды интерполяции между ними)

Цитата:
Думаю здесь нужно делать через таймер...
Сейчас попробую поколдую...
grey вне форума Ответить с цитированием
Старый 11.11.2007, 19:09   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
А смысл 400 строк в том, сначала считывается с ини-файла график, а потом возможно будет необходимость просмотреть какой точке какое значение соответствует
Ну так запихните ваши значения в массив, а индексом для него будет POINT.
И вместо ваших 400 строк ничего не надо будет.
Будет просто
Label13.Caption :=IntToStr(point) ;
Label14.Caption :=IntToStr(massiv[point]);
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пара вопросов [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 7 18.04.2008 14:28
Пара вопросов... ~N@um~ Помощь студентам 6 14.07.2007 09:49
Пара вопросов. Kukkk Общие вопросы Delphi 5 03.07.2007 11:40
Пара вопросов xak2 Общие вопросы Delphi 6 08.05.2007 20:58
пара вопросов Trooper Общие вопросы Delphi 3 05.11.2006 17:56