Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 416
от 17.03.2006, 20:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 277, Экспертов: 70
В номере:Вопросов: 1, Ответов: 2


Вопрос № 37356: Здравствуйте, Эксперты! Есть листинг, который приведён в приложении. Суть вопроса: Как мне определить из DLL модуля рисовать на Пользовательской форме?. То есть необъодимо определить дескриптор формы. Функция Create_Zone(HandleForm, ...

Вопрос № 37.356
Здравствуйте, Эксперты!

Есть листинг, который приведён в приложении.
Суть вопроса: Как мне определить из DLL модуля рисовать на Пользовательской форме?. То есть необъодимо определить дескриптор формы.
Функция Create_Zone(HandleForm, X,Y,X1,Y1: Integer) должна в DLL помечать обасть X,Y,X1,Y1 на которой можно рисовать. HandleForm - дескриптор формы.
Вопрос: Если я всё правильно сделал, то как теперь можно обратиться к этой неизвестной форме, через дескриптор?

Всем спасибо. Оценю реально.

Приложение:

Отправлен: 12.03.2006, 19:37
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: sir henry
Здравствуйте, Подболотов Иван Алексеевич!
Насколько я понял, Вы хотите рисовать на какой-то другой форме. Откуда Вы будете рисовать (из DLL или самостоятельно запущеного экзешника) - совершенно не важно, я поясню Вам принцип.
1. Если Вы собираетесь использовать функции для рисования WInAPI, то Вам нужно получить хэндл формы, на которой Вы будете рисовать. Если имя формы известно (оно из Вашего же приложения), то это просто Form1.Handle, либо найти этй форму по заголовку - GetWindowText().
2. Нужно получить дескриптор поверхности для рисования - GetDC(хэндл).
3. Теперь, используя этот дескриптор Вы можете рисовать любые фигуры - Arc(), LineTo(), Ellipse() и т.п.
Если Вам непонятна какая-то конкретика, реализация того или иного действия, то уточните вопрос.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 13.03.2006, 06:06
Оценка за ответ: 5
Комментарий оценки:
Заинтересовала концепция. Спасибо. Загляните в мини-форум. Меня осенило, и вроде бы всё работает.

Отвечает: Злоумышленник
Здравствуйте, Подболотов Иван Алексеевич!
Не совсем понял, что требуется, но могу посоветовать применить API функцию GetWindowRect:
...
var
r: TRect;
...
begin
...
GetWindowRect(SomeForm.Handle,r);
После этого получаешь свои X,Y,X1,Y1 как r.Left, r.Top, r.Right, r.Bottom и рисуешь, что надо.

К неизвесной форме обращаются по дескриптору. Его можно найти по заголовку или классу (ты должен знать имя класса окна или его заголовка). FindWindow('theclassname', nil) //по классу
или
FindWindow(nil, 'thecaption') //по заголовку

Если один или оба вызова возвращают 0, то ты использовал неверное имя класса, неверный заголовок, или окно не является самым верхним окном. А возвращается как раз дескриптор окна.


---------
Почему нет встроенного языка 1С на мордовском? Было бы клёво!
Ответ отправил: Злоумышленник (статус: 4-ый класс)
Ответ отправлен: 13.03.2006, 18:12
Оценка за ответ: 5
Комментарий оценки:
Хорошее, начало!:) А как теперь в функции Create_Zone, которая находится в DLL получить доступ к форме (приложению), которая (которое) вызвала(о) DLL?


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.20 (beta) от 17.03.2006
Яндекс Rambler's Top100

В избранное