![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 16.10.2007
Сообщений: 4
|
![]()
Столкнулся с проблемой. Имею задание создать, работая с ОС без возможностей VCL окно, в котором реализовать рисование 3 типов фигур по клику мыши. Пятиугольник, 6угольник и равнобедреный треугольник. Общее количество фигур ограничено 10. Реализовать смену активной фигуры на нажатие клавиш от 0 до 9. активная выделяется жирной линией. Также реализовать удаление фигуры. И еще поворот на заданный угол вокруг центра фигуры и симметрия относительно горизонтальной оси или вертикальной оси. Я сделал только само пустое окно. Но дальше тупик. Как реализовать создание фигур на клик мыши? И ограничить их количество? Вообщем суть вопроса как нажатиям кнопок присвоить некие процедуры?
|
![]() |
![]() |
![]() |
#2 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Начните с изучения MoveTo, LineTo и так далее (хэлп Дельфи).
Там все подробно расписано, вы легко разберетесь, тем более, что приведено много примеров рисования на канве... ![]() |
![]() |
![]() |
![]() |
#3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Без VCL это значит MoveTo и LineTo отпадают.
Остается только API
I'm learning to live...
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 16.10.2007
Сообщений: 4
|
![]()
С рисованием проблем не имею. Основное как к нажатиям кнопок привязать события? И как в месте клика мышкой создать фигуру? БЕЗ VCL
|
![]() |
![]() |
![]() |
#5 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Не понял... Тебе все нуна на API или ты просто не знаешь как в Делфе событие обработать?
Я почему так спрашиваю, ибо в Делфе без VCL мона только писуя на API, т.е. для кнопки прописывая обработку message ручками. А OnClick - это уже VCL фактически. т.е. насчет "Без VCL" эт ты уточни в каких рамках "Без"
I'm learning to live...
Последний раз редактировалось Stilet; 16.10.2007 в 11:05. |
![]() |
![]() |
![]() |
#6 |
Регистрация: 16.10.2007
Сообщений: 4
|
![]()
Вообщем в подключеных библиотеках в юзес должны быть Виндовс и еще что то. и все. Окно, то есть форму, сам пишешь. ОнКлик действительно нельзя. Тема WINAPI
|
![]() |
![]() |
![]() |
#7 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Знаешь, я тебе советую приобрести програмку APIx2 с FreeSoft.ru
Она поможет Делфеподобно создать прогу на чистом API, причем делфовым кодом. Вот пример обработки нажатия на кнопку на форме : Данный код был спроектирован в среде APIx - Visual WinAPI 2 Copyright (c) PiddleSoft 2004-2006 http://piddlesoft.narod.ru piddlesoft@mail.ru Дата генерации листинга - 16.10.2007 10:30:11 } program APIx_Project8; uses windows, messages, commctrl; //Используемые модули // Иконка {$R 'icon.res'} var WinClass : TWndClass; //переменная класса TWndClass для создания главного окна hInst : HWND; //хандлер приложения Handle : HWND; //локальный хандлер Msg : TMSG; //сообщение hFont : HWND; //хандлер шрифта Button1 : HWND; //TButton Button2 : HWND; //TButton procedure ShutDown; //процедура завершения программы begin DeleteObject(hFont); //удаление шрифта UnRegisterClass('TAPIxForm', hInst); //удаление окна ExitProcess(hInst); //закрытие программы end; function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений begin Result := DefWindowProc(hwnd, msg, wparam, lparam); case Msg of WM_COMMAND: if (lParam = Button1) and (HiWord(wParam) = BN_CLICKED) then begin // Нажата кнопка end ; WM_DESTROY: ShutDown; end; end; begin hInst := GetModuleHandle(nil); with WinClass do begin Style := CS_PARENTDC; //стиль класса главного окна hIcon := LoadIcon(hInst, MAKEINTRESOURCE('APIXICON')); //иконка программы lpfnWndProc := @WindowProc; //назначение обработчика сообщений hInstance := hInst; hbrBackground := COLOR_BTNFACE + 1; //цвет окна lpszClassName := 'TAPIxForm'; //класс окна hCursor := LoadCursor(0, IDC_ARROW); //активный курсор end; InitCommonControls; RegisterClass(WinClass); //регистрация класса в системе // Создание главного окна программы Handle := CreateWindowEx(0, 'TAPIxForm', 'Форма1', WS_OVERLAPPEDWINDOW or WS_VISIBLE or WS_MINIMIZEBOX or WS_MAXIMIZEBOX or WS_SYSMENU, 219, 116, 550, 366, 0, 0, hInst, nil); // Создание шрифта hFont := CreateFont( -11, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif'); Button1 := CreateWindow( 'Button', 'Button1', WS_CHILD or BS_TEXT or WS_VISIBLE, 16, 16, 105, 57, Handle, Button1, hInst, nil); SendMessage(Button1, WM_SETFONT, hFont, 0); Button2 := CreateWindow( 'Button', 'Button2', WS_CHILD or BS_TEXT or WS_VISIBLE, 144, 16, 177, 73, Handle, Button2, hInst, nil); SendMessage(Button2, WM_SETFONT, hFont, 0); // Цикл сбора сообщений while(GetMessage(Msg, 0, 0, 0)) do begin TranslateMessage(Msg); //прием сообщений DispatchMessage(Msg); //удаление сообщений из очереди end; end.
I'm learning to live...
|
![]() |
![]() |
![]() |
#8 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
При нажатии кнопки программе посылается соотв. сообщение с параметрами (координаты и т.п.), например нажатие левой кнопки мыши WM_LBUTTONDOWN (более подробно поищи в сети примеры на чистом API), в обработчике этих сообщений и нужно рисовать фигуры, и производить прочие вычисления.
Во первых неизвестно в каком порядке рисовать какие фигуры, будем считать что случайным выбором. Код:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 16.10.2007 в 17:44. |
![]() |
![]() |
![]() |
#9 | |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Ну зачем уж так категорично?
Вот вам, например, описание LineTo из WinAPI: Цитата:
|
|
![]() |
![]() |
![]() |
#10 |
Регистрация: 16.10.2007
Сообщений: 4
|
![]()
Вопрос больше к математикам наверное. Как сделать симметрию относительно вертикальной (горизонтальной) оси? И еще как удалить фигуру корректно?
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Dec to Hex - пример использования | Roof | Общие вопросы Delphi | 8 | 03.08.2008 19:40 |
Примеры использования и выбор лучшей DB | BOBAH13 | БД в Delphi | 4 | 03.05.2008 22:32 |
Право использования AlphaControls! | Xenofibrius | Компоненты Delphi | 2 | 20.04.2008 16:08 |
Периметр сложніх фигур | Hworang | Общие вопросы C/C++ | 7 | 01.04.2008 19:30 |