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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 22:41   #1
Devolarium
Форумчанин
 
Регистрация: 05.12.2011
Сообщений: 102
По умолчанию нестандартная кнопка

Можно ли создать не квадратную или прямоугольную кнопку а 6-ти угольную например? в Delphi

Последний раз редактировалось Devolarium; 04.01.2012 в 22:51.
Devolarium вне форума Ответить с цитированием
Старый 05.01.2012, 03:04   #2
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Встречал такое с помощью дополнительных компонентов. В теории можно, могу посоветовать разобраться с прорисовкой компонента rkSmartTabs (вкладки хрома). Хороший пример как нарисовать нестандартную форму и обработать ее события.
kettanaito вне форума Ответить с цитированием
Старый 05.01.2012, 08:05   #3
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Я вообще делал так. Ставил компонент TImage, загружал в него картинку нашей кнопки, а потом проверял координаты щелчка мышкой у пользователя (Если координаты мышки в момент щелчка принадлежат к "Image'вой кнопке", то значит делаем нужные действия), в итоге получалась вполне рабочая кнопка
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 05.01.2012, 12:48   #4
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию HexButton

Вложения
Тип файла: rar HexButton.rar (4.1 Кб, 40 просмотров)
beegl вне форума Ответить с цитированием
Старый 05.01.2012, 13:52   #5
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Нехочется плодить новую тему про кнопки, поэтому решил спросить здесь.

Интересует вот такой вопросик.
Как бы реализовать увеличение, либо уменьшение значения по такому алгоритму.
Допустим юзер нажал на кнопку и отпустил - значение увеличилось.
Но если он её удерживает нажатой то значение постоянно увеличивается.
Пример в принципе не интересует, просто в теории нужна реализация.
z-wer вне форума Ответить с цитированием
Старый 05.01.2012, 16:35   #6
Devolarium
Форумчанин
 
Регистрация: 05.12.2011
Сообщений: 102
По умолчанию

beegl при запуске hexbutton ошибка вылетает(
Devolarium вне форума Ответить с цитированием
Старый 05.01.2012, 16:43   #7
Devolarium
Форумчанин
 
Регистрация: 05.12.2011
Сообщений: 102
По умолчанию

Anton911 можешь небольшой пример кода дать, как отлавливать место куда тыкнул пользователь на картинке
Devolarium вне форума Ответить с цитированием
Старый 05.01.2012, 20:03   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

procedure Tfrm.fonMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);/////x,y и ест координаты "тыка"
begin
shiwmessage('По горизонтали: '+inttostr(x)+'По вертикали: '+inttostr(y));
end;

Последний раз редактировалось Кольша; 05.01.2012 в 20:06. Причина: _|_
Кольша вне форума Ответить с цитированием
Старый 05.01.2012, 22:07   #9
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Цитата:
Сообщение от z-wer Посмотреть сообщение
Нехочется плодить новую тему про кнопки, поэтому решил спросить здесь.

Интересует вот такой вопросик.
Как бы реализовать увеличение, либо уменьшение значения по такому алгоритму.
Допустим юзер нажал на кнопку и отпустил - значение увеличилось.
Но если он её удерживает нажатой то значение постоянно увеличивается.
Пример в принципе не интересует, просто в теории нужна реализация.
Всем спасибо, я уже и сам разобрался. Всех с продолжающимся Новым годом.
z-wer вне форума Ответить с цитированием
Старый 06.01.2012, 17:50   #10
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
Радость

Цитата:
Сообщение от Devolarium Посмотреть сообщение
Anton911 можешь небольшой пример кода дать, как отлавливать место куда тыкнул пользователь на картинке
Проверка принадлежности точки к треугольнику. Многоугольники проще разбить на треугольники.

Глобальная переменная:
Код:
var ImageMousePos:TPoint;
Код:
function PrinTochkToTreyg(tX,tY:integer;x1,y1,x2,y2,x3,y3:integer):boolean;
  var
  x,y:array [0..3] of integer;
  Function PR(i,j:integer):boolean;
    begin
    x[1]:=x1; x[2]:=x2;  x[3]:=x3;
    y[1]:=y1; y[2]:=y2;  y[3]:=y3;
      PR:=((tx-x[i])*(y[j]-y[i]))>((x[j]-x[i])*(ty-y[i]));
    end;
begin
  if ((pr(1,2))=(pr(2,3))) and ((pr(1,2))=(pr(3,1)))
    then Result:=true else Result:=false;
end;
Чтобы не запутаться в переменных создал класс треугольников
Код:
type
cTreygolnik=class
x1,x2,x3,y1,y2,y3:integer;
end;
На основе функции принадлежности точки к треугольнику, сделал для четырех угольника.
Но эта функция была подстроена под мои координаты, вы можете сами переделать функцию под свои нужды.
Код:
function BooleanPrinTochkCY(tx,ty:integer):boolean;
var Pr:boolean;
  Treyg: array [0..2] of ctreygolnik;
begin
Pr:=false;
Treyg[0]:=cTreygolnik.Create;
Treyg[1]:=cTreygolnik.Create;
Treyg[0].x1:=1;   Treyg[0].x2:=200;   Treyg[0].x3:=1;
Treyg[0].y1:=1;   Treyg[0].y2:=1;     Treyg[0].y3:=90;
Treyg[1].x1:=1;   Treyg[1].x2:=110;   Treyg[1].x3:=200;
Treyg[1].y1:=90;   Treyg[1].y2:=160;     Treyg[1].y3:=1;
if (PrinTochkToTreyg(tx,ty,Treyg[0].x1,Treyg[0].y1,Treyg[0].x2,Treyg[0].y2,Treyg[0].x3,Treyg[0].y3)) or (PrinTochkToTreyg(tx,ty,Treyg[1].x1,Treyg[1].y1,Treyg[1].x2,Treyg[1].y2,Treyg[1].x3,Treyg[1].y3)) then
Pr:=true;
Treyg[0].Free;
Treyg[1].Free;
Result:=Pr;
end;
Пользователь водит мышкой по имаджу:
Код:
procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var SectorID,SystemID:integer;
  b:boolean;
  Text:string;
begin
ImageMousePos.X:=x;
ImageMousePos.Y:=y;
end;
Пользователь кликнул по имаджу
Код:
procedure ImageClick(Sender: TObject);
var x,y:integer;
b:boolean;
begin
x:=ImageMousePos.X;
y:=ImageMousePos.Y;
b:=BooleanPrinTochkCY(x,y);
if b then
//Делаем действия
Обратите внимание, что X,Y точки может отобразить процедура OnMouseMove, а OnClick не определит координаты(Если использовать x:=Mouse.CursorPos.X и y:=Mouse.CursorPos.Y, то координаты выдаст относительно формы, и они будут не верны). Поэтому хитрим, сохраняем координаты X,Y из процедуры OnMouseMove в глобальные переменные, следовательно в процедуре OnClick используем именно эти глобальные переменные.
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 06.01.2012 в 18:06.
Anton911 вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нестандартная гистограмма MaxxVer Microsoft Office Excel 5 17.11.2011 11:11
Нестандартная форма ZvEr_HaCkEr Общие вопросы Delphi 16 27.08.2010 05:17
Нестандартная сортировка DJOV Microsoft Office Excel 5 10.09.2009 01:17
Нестандартная авторизация krot98 Работа с сетью в Delphi 7 09.12.2008 22:09
Нестандартная форма Лубышев Общие вопросы Delphi 7 28.01.2008 20:33