Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание Label по щелчку мыши, Количество определяется пользователем 
V
    Опции темы
Iwoyd
  Дата 3.2.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу прошу меня извинить, если подобные вопросы возникали уже на форуме. Но я просто не знаю, как корректно описать данный вопрос.
Задача: по щелчку мыши в диалоговом окне создавать точку на экране и отображать ее номер. Пока в голове возникло только такое решение: при каждом щелчке создавать TLabel. Как это сделать? 
Если есть решение проще, подскажите пожалуйста, мои решения могут быть глупыми.
Заранее спасибо)
p.s. Хотелось бы, конечно, разъяснения по этому вопросу в C++ Builder с TLabel. Но можно и в MS Visual C++ со StaticText.
PM MAIL   Вверх
Zorak
Дата 3.2.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



отхвачивай WM_LBOTTONDOWN и прикаждом щелчке миши делай щотчик на 1 больше...и етот щотчик (тоесть номер)  виводи в диалог функцией TextOut чуть више координат щелчка миши.... например на 5 пикселов....
З,Ы. Если не понятно виразился, спрашивай.. - обясню =)
(с) я говорил про Visual C++ 6.0 ..


--------------------
Знание - сила. А сила есть, ума не надо...
Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло.
PM MAIL ICQ   Вверх
Static
Дата 3.2.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



1. Для Билдера есть спец. раздел ;)

2. Не думаю, что TLabel - хорошая идея.

имхо, лучше на Canvas формы рисовать точки. А рядом через TextRect писать номер.
Билдер давно не видел, могу местами ошибаться - не помню, передаются ли в методе OnClick координаты щелчка. Если нет - их можно запоминать в OnMouseMove, например, там точно есть. Таким образом:
- получаем OnClick
- достаем запомненные накануне координаты мыши
- делаем что-то типа Form1->Canvas->не_помню_название_метода smile ставим точку. Хелп у Билдера подробный - можно легко найти.
- делаем небольшое изменение координат
- в новых координатах делаем Canvas->TextRect(rect, IntToStr(i)) - где i номер точки, rect - прямоугольник TRect созданный с учетом измененных координат
- i++ smile
как-то так
--------------------
Я не настолько безнадежен, как кажется...
PM MAIL   Вверх
586
Дата 3.2.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Код
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    static int i = 0;
    //Canvas->TextOutA(X, Y, IntToStr(i++));

    TLabel *l = new TLabel(Owner);
    l->Left = X;
    l->Top = Y;
    l->Caption = IntToStr(i++);
    l->Parent = this;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClick(TObject *Sender)
{
    /*static int i = 0;
    TPoint pt = this->ScreenToClient(Mouse->CursorPos);

    TLabel *l = new TLabel(Owner);
    l->Left = pt.x;
    l->Top = pt.y;
    l->Caption = IntToStr(i++);
    l->Parent = this;               */
}

PM   Вверх
Dmi3ev
Дата 3.2.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



вот так можно делать:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int mx, my;//координаты мыши
int i=1;//счетчик точек
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClick(TObject *Sender)
{
Form1->Canvas->Pixels[mx][my]=clRed;//красим пиксель
Form1->Canvas->TextOutA(mx+3, my+3, IntToStr(i++));//подписываем точку
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
mx=X;//запоминаем х
my=Y;//запоминаем у
}
//---------------------------------------------------------------------------



--------------------

PM MAIL   Вверх
taiven
Дата 3.2.2009, 22:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну тогда уж так:
Код

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    static int i = 0;
    Canvas->Pixels[X][Y] = clRed;
    Canvas->TextOutA(X+3, Y+3, AnsiString(i++));
}

PM   Вверх
Dmi3ev
Дата 3.2.2009, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Цитата

ну тогда уж так:

тогда уж вот так)))
Код

void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
    static int i = 1;
    Canvas->Pixels[X][Y] = clRed;
    Canvas->TextOutA(X+3, Y+3, AnsiString(i++));
}



--------------------

PM MAIL   Вверх
taiven
Дата 3.2.2009, 23:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Dmi3ev @  3.2.2009,  21:32 Найти цитируемый пост)
тогда уж вот так)))

настоящие программисты начинают отсчёт с нуля smile  smile 
PM   Вверх
Dmi3ev
Дата 4.2.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



 smile
Цитата

настоящие программисты начинают отсчёт с нуля
 
скромно...  smile


--------------------

PM MAIL   Вверх
Iwoyd
Дата 11.2.2009, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Огромное всем спасибо.
Разобралась)
Еще вопросик:
Как по-вашему проще сделать проверку, попал ли пользователь щелчком мыши в определенную область (окрестность какой-л точки)?
У меня голове возникает решение только с помощью циклов. Но я слишком плохо знаю возможности языка. 

Это сообщение отредактировал(а) Iwoyd - 11.2.2009, 10:48
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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