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

Программирование. Форум !!!

За 2005-05-27

Re[3]: Зеркальное отображение

Хаю ду ю ду ol?

Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
тоже что-нибудь напечатаю:

o> спасибо за совет.
o> но здесь вся изюминка- в постоянном и автоматическом отображении
o> скрина зеркально.
o> т.е. нужно отрабатывать событие OnPaint и успевать
o> в нем зеркально отображать пикселы.
o> копируя покоординатно зеркально images..ну..не укладываюсь мягко
o> выражаясь)

Чет я не понял нафига тебе это надо? Ведь если ты перевернешь
изображение, то координаты всех окон не изменятся, т.е., например,
кнопки закрыть, свернуть, развернуть на левую сторону от этого не
переедут. А если будет невозможна нормальная работа то зачем
*постоянное* зеркалирование? Или ты хочешь и мышку зеркалировать?
Но тогда за минуту к такой мышке не привыкнешь.
Объясни зачем тебе все это?

   2005-05-27 23:20:14 (#374873)

Re[3]: Delphi. Вызвать диалог как подчиненный.

Здравствуйте !

> VVV> видимо, надо просто для диалога делать свой поток ?
> А вот тут можно по подробнее?

Ну как все как в обычном приложении. Просто создать
поток с помошью API-функции CreateThread (или каких либо
оберто - CWinThread в MFC), а в нем уже создать диалог.
Тогда получится что окно статуса сервера в одном потоке,
диалог - в другом. Должно помочь, наверно.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4523
Возраст листа : 614 (дней)
Количество подписчиков : 524
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/374805
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-27 21:18:58 (#374805)

Re[2]: Зеркальное отображение

спасибо за совет.
но здесь вся изюминка- в постоянном и автоматическом отображении
скрина зеркально.
т.е. нужно отрабатывать событие OnPaint и успевать
в нем зеркально отображать пикселы.
копируя покоординатно зеркально images..ну..не укладываюсь мягко
выражаясь)

АТ> Смотрю и вижу, как ты печатаешь умные вещи и дай-ка, думаю,
АТ> тоже что-нибудь напечатаю:

o>> подскажите не сталкивался ли кто с такой вещью- нужно обеспечить
o>> зеркальное отражение дисплея. Т.е. на дисплее информация зеркально
o>> отражена. не для окна пользовательской программы, а для десктопа в
o>> целом.
o>> Спасибо..подскажите куда копать!

АТ> Если на Delphi - тогда держи код получения изображения экрана, за 5
АТ> минут сваял :)
АТ> На форме Image1 (alClient), Image2, Button1
АТ> Сама форма wsMaximized и bsNone

АТ> procedure TForm1.Button1Click(Sender: TObject);
АТ> var DC: HDC;
АТ> begin
АТ> Form1.Hide;
АТ> Sleep(1000);
АТ> DC := GetDC(0);
АТ> Image2.Canvas.Handle := DC;
АТ> Image1.Canvas.CopyRect(Image1.ClientRect, Image2.Canvas, Image1.ClientRect);
АТ> ReleaseDC(0, DC);
АТ> Form1.Show;
АТ> end;

АТ> А вертеть - это мне влом :) да и должен же ты сам свою проблему решать.

   ol 2005-05-27 21:10:13 (#374799)

Re[3]: error LNK2005: VC++ 6.0

> В таком случае расскажи как должно быть и как сделать по-людски.
> Мне-то казалось, что всё нормально - из объектника взять
> скомпилированный код, определить смещения, бухнуть в ехе и всё (может
> это связано с использованием precompiled headers?).

Ну, ВВ тебе уже всё объяснил. От себя добавлю следующее.

1. Заголовки - это (в частности) средство декларации интерфейсов. В простом
plain-C иначе декларировать интерфейс было просто не возможно. C++ эту
возможность унаследовал в силу простоты и удобства. По мне, так методы
декларации интерфейсов Turbo/Borland Pascal и Modula-2 куда как более
неудобны, а в Delphi вообще доведены до маразматической сложности.

2. Так как заголовки описывают интерфейс чего-то там (например, stdio.h
описывает интерфейс стандартной подсистемы ввода-вывода в plain-C, vector -
интерфейс класса vector<> в C++, locale - интерфейс средств локализации и
поддержки национально- и культурно- зависимых характеристик операционного
окружения программы, итд), то реализации в них быть не должно. Исключение
делается только для информации, без которой невозможно обойтись в принципе -

это подставляемые (inline) функции и шаблоны, так как они нужны прямо здесь
и сейчас. И то для шаблонов - это скорее от лени поставщиков средств
разработки, чем по необходимости. Export templates им видите ли напряжно
поддержать.

3. Любое что-нибудь external linkage, появляющееся в заголовке (а
подставляемые функции и шаблоны как раз в большинстве случаев к ним могут не

относиться), это потенциальный источник проблем при сборке, как ты уже
убедился и как это прояснил ВВ. НЕ ДОЛЖНО быть реализации интерфесов в
заголовках. Не для этого они предназначены. Короче, если в процессе
компиляции чисто заголовка компилятор порождает ненулевой объём объектного
кода (не путай с нулевым размером объектного файла), то этот заголовок
неправильный. Реализация должна быть в отдельной единице компиляции. Даже
если она состоит всего лишь из одного определения `int i=0;` Исключения
"разрешены" стандартом только для константных r-value, например `const int
i=0`. Но уже для `const coolClass myClass(someExpression)` это будет
неверно, ибо это l-value.

4. Имеет смысл создавать заголовки не только для экономии размера кода. Даже

если заголовок будет использован в проекте всего один раз, всё равно он
решает свою задачу по декларации интерфейса. Действительно, ведь новый класс

программист может написать даже в том случае, если ему понадобится всего
один его экземпляр. Главное, что ему понадобился чёрный ящик, и он этим
классом его создал. Впрочем, могут быть и другие причины.

5. Заголовки не имеют самостоятельного применения. Окромя быть прочитанными
программистом, "по диагонали", возможно. Заголовки включаются в единицу
компиляции, как составные её части, снабжая компилятор объявлениями.
Реализация всего этого потом и позже подлинкуется при сборке.

Ещё вопросы?

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4521
Возраст листа : 614 (дней)
Количество подписчиков : 524
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/374490
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2005-05-27 09:44:25 (#374490)

Re[2]: Delphi. Вызвать диалог как подчиненный.

Здравствуйте, Victor,

VVV> А сервер что, какое то еще окно отображает кроме окна этого диалога ?
Окно сервера, где отражается текущий статус.
VVV> Вообще, думаю, надо передавать в сервер дескриптор какого либо окна
VVV> клиентского приложения и при создании диалога указывать это окно в качестве

VVV> родителя диалога.
Так я и делаю. Тут еще загвоздка, что передаю я Хэндл не самого
приложения, а его MDI формы.
VVV> Если у сервера есть поток с очередью сообщений в котором
VVV> существует какое то видимое окно, а диалог создается в том же потоке, то

VVV> видимо, надо просто для диалога делать свой поток ?
А вот тут можно по подробнее?

   2005-05-27 06:35:49 (#374429)

Re[3]: error LNK2005: VC++ 6.0

Здравствуйте !

> >> Есть хидер (xxx.h), в котором определяется переменная и значение
> >> (int i=1) или функция и реализация. Затем они
> include-ятся в другом

Кстати, зачем в h писать реализацию ?
Нормально, это когда в h только декларации находятся, а реализации -
в c/cpp (хотя в ATL/WTL именно в h).

Можно (если уж очень хочется в h-нике), писать так:

#if !defined _CHTO_TO
#deine _CHTO_TO

int i = 1;

#endif


Тут главное понять как работает директива include.
Можно сказать, что она просто содержимое указанного файла
_полностью_ вставляет вместо себя.
А потом все это компилится.

То есть например.

Файл i1.h:
int a1 = 0;

Файл i2.h:
int a2 = 0;

Файл i3.h:
int a3 = 0;

Файл c.cpp:

...
#include "i1.h"
#include "i2.h"
#include "i3.h"
...

скомпилится так, как если бы в нем просто написать

...
int a1 = 0;
int a2 = 0;
int a3 = 0;
...


Во тут то и прикол.
Если например написать в c.cpp:

#include "i1.h"
#include "i1.h"

вылетит ошибка, потому что это будет эквивалентно:
int a1 = 0;
int a1 = 0;

А это - двойное обьявление переменной.



> В таком случае расскажи как должно быть и как сделать по-людски.
> Мне-то казалось, что всё нормально - из объектника взять
> скомпилированный код, определить смещения, бухнуть в ехе и всё (может
> это связано с использованием precompiled headers?).


По людски - в h-ники вынести объявления (декларации классов, прототипы
функций).


Зачем вообще нужны h-файлы ?

ПРОСТО ЧТОБЫ НЕ ПИСАТЬ ОДНО И ТО ЖЕ МНОГО РАЗ.


То есть если создать 2 cpp файла и написать:

файл c1.cpp:

function a(int n)
{
...
}


файл c2.cpp:

extern function a(int n);

function aaa(int n)
{
a(n);
}


то все будет OK.


Но представь, что есть 100 функций, которые используются в 50 cpp файлах.
Можно описывать в _каждом_ cpp файле нужные прототипы функций, а можно -
в одном h файле описать все прототипы прототипы и во все cpp этот
h подключать.


--
С уважением, Вахтуров Виктор.

Номер выпуска : 4519
Возраст листа : 614 (дней)
Количество подписчиков : 523
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/374399
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-27 02:54:29 (#374399)

Re: Delphi. Вызвать диалог как подчиненный.

Здравствуйте !

> Вопрос такой, есть у меня СОМ-сервер, в котором есть функция вывода
> диалога. СОМ-сервер реализован как ехе-файл.
> Когда я вызываю метод сервера диалог должен отобразиться подчиненным
> вызываемому приложению. Как это сделать?
> Сейчас когда я вызываю метод вывода диалога у меня как бы и сервер
> выскакивает и приложение вызвавшее. Хэндл приложения есть, что дальше?

А сервер что, какое то еще окно отображает кроме окна этого диалога ?
Вообще, думаю, надо передавать в сервер дескриптор какого либо окна
клиентского приложения и при создании диалога указывать это окно в качестве
родителя диалога. Если у сервера есть поток с очередью сообщений в котором
существует какое то видимое окно, а диалог создается в том же потоке, то
видимо, надо просто для диалога делать свой поток ?

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4518
Возраст листа : 614 (дней)
Количество подписчиков : 523
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/374365
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-05-27 00:46:22 (#374365)