Страница 4 из 5
Re: Копирование экрана
Добавлено: 16 окт 2009, 12:29
Romeo
atavin-ta, я не хочу ни у кого спрашивать. Ты факты можешь привести? Собственно, даже фактов мне твоих не нужно, я знаю правильный ответ - это функция VCL. Просто когда бросаешься словами "Учи API" нужно быть уверенным в свои словах, чтобы не ударить лицов в грязь. А если оказался не прав после такого, то не мешало бы извиниться.
Re: Копирование экрана
Добавлено: 16 окт 2009, 12:39
atavin-ta
Тебя что, не удовлетворяет ссылка на книгу? А ответа ты не знаешь.
Re: Копирование экрана
Добавлено: 16 окт 2009, 12:45
Romeo
Нет, не удовлетворяет. Мне нужны факты.
Кстати, ссылку ты так и не дал. Дай мне ссылку на электронный вариант его книги, где используется эта функция. Я тебе говорю, ты её путаешь с какой другой функцией. А ты вместо того, чтобы доказать свою правоту или сознаться в том, что ошибся, съезжаешь с темы.
Re: Копирование экрана
Добавлено: 20 окт 2009, 04:54
atavin-ta
Чарлз Петзолд. Программирование для Windows 95. Это и есть факты. А вот вопрос, на который ты не ответишь: зачем вцлу вообще возиться с контекстом, если на поверхности вцл-компонентов рисуют только методами? То есть внутри процедура прорисовки конгечно использует контекст. Но нафига его передавать самой проге?
Re: Копирование экрана
Добавлено: 21 окт 2009, 00:03
Romeo
" писал(а):Чарлз Петзолд. Программирование для Windows 95. Это и есть факты.
Это не факт, это слова. Ссылку на книгу мне и номер страницы, на которой это написано.
Я тоже могу сказать, что Пифагор писал о времени жизни CORBA объектов, но без доказательства мои слова не будет стоит и ломанного гроша, так же, как и твои.
" писал(а):А вот вопрос, на который ты не ответишь: зачем вцлу вообще возиться с контекстом, если на поверхности вцл-компонентов рисуют только методами?
То есть интеграцию с Win API ты отвергаешь на корню? Представь, что у тебя есть сторонняя библиотека, на вход которой ты должен передать DC. Если размышлять, как ты, то эту библиотеку в Borland C++ использовать не получится, так как средствами VCL контекст не получить. В топку такой компилятор, скажу тебе по секрету.
Кстати, метод GetDeviceContext есть, кажется, у VCL-еского TWinControl. Ты, наверное, очень удивишься, когда увидишь что именно он возвращает... так как возвращает он HDC.
Я ответил на твой вопрос?
Re: Копирование экрана
Добавлено: 21 окт 2009, 10:24
atavin-ta
А HDC разве не контекст? Но зачем он нужен вцлу? И у меня вызывается не метод, а функция, не входящая в класс.
" писал(а):То есть интеграцию с Win API ты отвергаешь на корню? Представь, что у тебя есть сторонняя библиотека, на вход которой ты должен передать DC. Если размышлять, как ты, то эту библиотеку в Borland C++ использовать не получится, так как средствами VCL контекст не получить. В топку такой компилятор, скажу тебе по секрету.
Бред. Любая апишная функция создания контекса, вызванная с полем Handle вцл-компонента в качестве параметра типа HWND, даст контекст. Зачем ещё метод-обролочка? Без неё проще.
Re: Копирование экрана
Добавлено: 21 окт 2009, 10:59
Romeo
" писал(а):А HDC разве не контекст? Но зачем он нужен вцлу? И у меня вызывается не метод, а функция, не входящая в класс
Я понимаю, что это метод. Я тебе только указал пример, когда VCL методы возвращают контекст в ответ на то вот эти твои слова:
А вот вопрос, на который ты не ответишь: зачем вцлу вообще возиться с контекстом, если на поверхности вцл-компонентов рисуют только методами?
" писал(а):Бред. Любая апишная функция создания контекста, вызванная с полем Handle вцл-компонента в качестве параметра типа HWND даст контекст.
Согласен, бред. Бред в твоей интерпретации.
Я повторяю постановку задачи. Представь, что у тебя есть сторонняя библиотека, из которой выставлена наружу функция, принимающая HDC. Если бы VCL методы не могли возвращать контекст, то такую библиотеку мы бы не смогли использовать в Builder/Delphi. Тебе не кажется, что это ограничение надуманным?
Я сторонник идеи того, что любая библиотека-враппер-для-Win-API (будь то MFC, ATL/WTL, VCL, не важно) должна уметь возвращать raw примитивы самой Win API для того, чтобы не накладывать подобные необдуманные ограничения. Все подобные библиотеки, которые мне известны следуют этому принципу и получить их методами, к примеру HDC, не является проблемой.
Re: Копирование экрана
Добавлено: 21 окт 2009, 11:26
atavin-ta
У любого вцл обекта есть открытое поле для хранения дискриптора окна данного компонента. Этот хэндл можно непосредственно скормить апи. А любой метод, работающий с контекстом - оболочка для точно такой же апишной функции. Но если есть сама функция, то зачем нужен такой метод? Кроме того, существование метода-оболочки доказывает существование апишного аналога, так как получить контекст самостоятельно вцл не способен.
О головоломках (оффтопик).
Добавлено: 21 окт 2009, 11:37
BBB
atavin-ta писал(а):У любого вцл обекта есть открытое поле для хранения дискриптора окна данного компонента. Этот хэндл можно непосредственно скормить апи. А любой метод, работающий с контектом - оболочка для точно такой же апишной функции. Но если есть сама функция, то зачем нужен такой метод? Кроме того, существование метода-оболочки доказывает существование апишного аналога, так как получить контекст самостоятельно вцл не способен.
Прочитал и вспомнил:
Если головоломка, которую вы разгадали перед тем, как вы разгадали эту, была труднее, чем головоломка, которую вы разгадали после того, как вы разгадали головоломку, которую вы разгадали перед тем, как вы разгадали эту, то была ли головоломка, которую вы разгадали перед тем, как разгадали эту, труднее, чем эта?
Re: Копирование экрана
Добавлено: 21 окт 2009, 11:41
atavin-ta
" писал(а):Прочитал и вспомнил:
Если головоломка, которую вы разгадали перед тем, как вы разгадали эту, была труднее, чем головоломка, которую вы разгадали после того, как вы разгадали головоломку, которую вы разгадали перед тем, как вы разгадали эту, то была ли головоломка, которую вы разгадали перед тем, как разгадали эту, труднее, чем эта?
Ты что воще?
Romeo писал(а): Если бы VCL методы не могли возвращать контекст, то такую библиотеку мы бы не смогли использовать в Builder/Delphi. Тебе не кажется, что это ограничение надуманным?
Где ты вообще увидел ограничение? Бери хэндл и никаких гвоздёв. Кроме того, рисование с помощью апи на вцле - источник проблем, так как вцл имеет собственную процедуру прорисовки, которая точно не договрится ни с какой библиотекой. Если уж очень хочется, то создай потомка вцл класса, перегрузи метод прорисовки и из него вызови все нужные библиотеки.
" писал(а):Я понимаю, что это метод. Я тебе только указал пример, когда VCL методы возвращают контекст в ответ на то вот эти твои слова:
А вот вопрос, на который ты не ответишь: зачем вцлу вообще возиться с контекстом, если на поверхности вцл-компонентов рисуют только методами?
Разве это ответ? Ты дал пример того, когда вцл именно так и делает, но не сказал, зачем.
А в связи с переходом в другую ось у меня возник вопрос: имеет ли моя задача вообще какое нибудь решение под linuxом? Без TImageа, но чтоб файл можно было сразу после съёмки экрана показать щелчком мыши в окне снимающей экран проги. И чтоб его ещё можно было скролить и менять масштаб его отображения. Формат под linuxом - любой растровый, но задаётся жёстко на этапе разработки. И чтоб картинка в нём сохранялась без потерь. Под виндой постановка задачи не меняется, но сама задача откладывается.