Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: ZBEP
Дата сообщения: 16.12.2010 12:46
regkz, TMS может?
Поставил, беру TAdvEdit, кидаю на форму, ствалю Transparent:=True; и всеравно не прозрачный.
Flat:=True; тоже пробовал, не помогает.
Выглядит так:

Я всетаки хотел бы сделать не так, что бы фон отрисовывался "прозрачным", а так, что бы он вообще не отрисовывался, либо, что бы можно было на фон выставить картинку.
Что за отрисовку Edit отвечает в StdCtrls.pas ?
Автор: 0D0A
Дата сообщения: 16.12.2010 13:21
ZBEP
В моем примере, как раз рисуется картинка вместо фона, те кусок родителя, на котором лежит RichEdit. Для этого родителю посылаются WM_ERASEBKGROUND и WM_PAINT с DC который будет фоном. В твоем примере, то на чем лежит RichEdit эти сообщения не обрабатывает стандартным образом, наверно. Те стоит их заменить на правильный код отрисовки.
Если едит не будет отрисовываться вобще, то на его месте будет мусор. В StdCtrls кода отрисовки нет, все рисует система.
Автор: ZBEP
Дата сообщения: 16.12.2010 13:50
0D0A, если делаю по твоему варианту, то RichEdit кидается как бы на задний план и его вообще не видно
Насчет замены отрисовки не совсем понял.

П.с.
Ну StdCtrls ведь как то сообщает системе что рисовать или не так все?
Автор: 0D0A
Дата сообщения: 16.12.2010 14:00
ZBEP
Прозрачность = рисовать вместо своего фона, кусок родителя на которм лежищь. Абстрактного понятия прозрачности не существует. Вот и рисуй фоном соответсвующий кусок своей картинки. Но я так понял, что с фоном все замечательно - не рисуется текст, да? К сожалению не специалист в DX, попробуй поиграться со стилями окна, типа убрать WS_EX_TRANSPARENT и т.д. Вообще наверно есть куча примеров с прозрачными контролами в DX. StdCtrls сообщает системе, что надо создать окно класса EDIT. На этом ее участие в отрисовке заканчивается.
Автор: ZBEP
Дата сообщения: 16.12.2010 14:20
0D0A, стиль пробовал менять, не помогает.

Цитата:
Но я так понял, что с фоном все замечательно - не рисуется текст, да?

Нет, как фон он вообще воспринимает фон самой формы, а не то что "на ней" рисует DX, т.е. если я убираю DX, сую под низ RichEdit картинку, то все норм, но если начинаю отрисовывать DX, то он как бы рисуется поверх RichEdit.

(если просто кинуть RichEdit на форму и ничего с ним не делать, то он будет поверх DX, но с монотонным цветом фона)
Автор: 0D0A
Дата сообщения: 16.12.2010 14:28
ZBEP
А сделай простой пример с одной формой, ричедитом, картинкой и DX (с компонентами). Посмотрю.
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 15:10
Если DX это DirectX, то обычно все необходимые контролы реализуют средствами самого директа, а винапи вообще не используют.
Автор: ZBEP
Дата сообщения: 16.12.2010 15:14
Frodo_Torbins, знаю, но т.к. это мой первый проект на DX и сами компоненты винапи нормально себя видут с DX, то я подумал, что чат будет легче реализовать не на DX.
Да и если я примерно представляю, как реализовать Edit средствами DX, то пока не пойму как можно сделать что-то вроде RichEdit или Memo, что бы была прокрутка и т.д.

0D0A, Залил простой проект с DX и все сорсы, что у меня есть для DX
Только там 2 формы, забыл все на 1 перекинуть, но думаю и так все понятно.
Скачать: http://zalil.ru/30155491 (2,83 МБ)
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 16:20
ZBEP
Разве что только со статичным фоном. Если же захочется динамический фон то тут нужен специальный набор DX-компонент. К примеру DXScene, но он платный.
Автор: ZBEP
Дата сообщения: 16.12.2010 16:37
Frodo_Torbins, с DXScene придется все заново переписывать
Сейчас если найду бесплатный для XE, то посмотрю что да как..
Автор: 0D0A
Дата сообщения: 16.12.2010 16:51
Какта все не просто. Без DX парадигма такая: RichEdit полностью рисуется в WM_PAINT (фон и текст). WM_ERASEBKGND не используется. Чтобы запретить рисование фона - задаем в стилях окна WS_EX_TRANSPARENT и используем хак WM_ERASEBKGND для отрисовки нашего фона. В обычном окружении вроде работает, но в DX, похоже WS_EX_TRANSPARENT трактуется просто как "окно невидимо" и DX-поверхность рисуется поверх. Как обойти конкретых идей нет.

Вот подумал что если бы была возможность исключить область занимаемую контролом из области отрисовки фона (типа ExcludeClipRect), и нарисовать этот кусок обычным GDI как написано выше, то все бы заработало Как сделать дырку в фоне? Но это уже похоже на извращение
Автор: ZBEP
Дата сообщения: 16.12.2010 17:15
0D0A, эт геморойно, т.к. фон то динамический будет.
Или как сейчас картинкой, движущейся относительно курсора.

П.с.
DXScane нашел для XE, странные компонеты XD
Позже надо будет еще на производительность проверить, чет мне кажется, что он прожерливей будет.
Хотя может только кажется..
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 17:20
0D0A
Изображение в DX накладывается на форму уже видеокартой, поэтому в общем случае его нельзя получить из винапи.
Автор: 0D0A
Дата сообщения: 16.12.2010 17:40
Frodo_Torbins
Ну главное сказать какта видеокарте, чтоб на наш контрол не накладывала (как надругие без WS_EX_TRANSPARENT), а файл фоновой картинки есть же? Может просто цвет фона едитов сделать максимально приближенным к цвету фона картинки в этом месте? Как на картинке, грязнозеленый. Не так гламурно, зато легче читать
Автор: ZBEP
Дата сообщения: 16.12.2010 17:52
DXScane пока вроде подходит для всего, что хочу сделать, ток не привычно немного.
Потихоньку переписываю все под него.
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 18:02
0D0A
Изловчиться то всегда можно, прога ведь "наша". К примеру расположить окно контрола над окном в которое рендерится DX. Получить фон сами у себя мы тоже сможем, хотя вытаскивание данных из буфера видяхи по идее дело не быстрое.
Но имхо рисование контрола средствами DX - более правильный и гибкий вариант. Тем более что есть готовые решения.
Автор: 0D0A
Дата сообщения: 16.12.2010 18:19
Frodo_Torbins
Ну понятно, что извращения. Особенно в плане следующей цели - отскинивания скроллбаров
ZBEP
Покажешь потом
Автор: KSJJFS
Дата сообщения: 16.12.2010 18:49
Где можно найти подробное faq по настройке Delphi2010 IDE
Автор: ZBEP
Дата сообщения: 16.12.2010 19:11
Frodo_Torbins, немного не в тему.
Ты случаем не знаешь, как в DXScane изменить Color у dxGUIImage ?
Кидаю в него ColorAnimation, но что-то не хочет ничего с ним делать, но со сферами всякими работает нормально..
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 19:29
ZBEP
Я с этим пакетом особо не работал, хотя по ихним демкам видно, что всяких мелких недоработок у них еще много. Возможно, что многие вещи там только через правку исходников можно сделать.

KSJJFS
На русском нигде наверно. В блогах и прочих русскоязычных ресурсах в основном о новинках всегда пишут. А на английском - в хелпе, либо в книгах Марку Канту. Хотя в прочем у него тоже только нововведения со времен Delphi7 описаны, но все очень подробно.
Автор: ZBEP
Дата сообщения: 16.12.2010 19:54
Подскажите какой-нить хороший/быстрый таймер не особо зависящий от нагрузки проца.
Или может есть что то подобное в самом ДХ?
Вяя..
Блин, в DXScane Memo не совсем прозрачный..
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 20:47
ZBEP
Вариантов разных много, все зависит от ваших требований. Самое простое это CreateTimer, потом Sleep, далее обьекты синхронизации ядра во главе с CreateWaitableTimer и конечно мультимедийные таймеры. Первый вариант реализован в стандартном TTimer. Готовое решение на основе второго варианта можно глянуть тут: http://delphikingdom.com/asp/viewitem.asp?catalogid=434 А в JCL есть таймер-обертка над мультимедийным.
Автор: ZBEP
Дата сообщения: 16.12.2010 21:02
Frodo_Torbins, спс, но я теперь даже не знаю, продолжать делать в DXScane или без него..
Скорее всего продолжу делать без него, т.к. с эффектами цвета я там так и не разобрался, да и в остальных мелочах там не все понятно
Автор: Frodo_Torbins
Дата сообщения: 16.12.2010 21:14
ZBEP
Можно у автора на форуме спросить, он похоже русский. А вообще вам решать.
Автор: ZBEP
Дата сообщения: 16.12.2010 21:23
Frodo_Torbins, я пока без DXScane попробую, позже если что-то будет сложно-реализуемо, то может и перепишу под него.

Почти ничего существенного не сделал за сегодня
Вот что имею на данный момент http://zalil.ru/30158549 (6.97MB)
(F11 Оконный режим)

П.с.
Мемо в ДХ сделаю как время так:
Принятый/отправленный текст буду хранить в буфере или файле и выводить кусок текста в зависимости от положения скрола.
Думаю то что нужно получится и без левых компонентов.
Автор: AndreyAgrh
Дата сообщения: 21.12.2010 10:28
Использую для создания файла Excell TXLSReadWriteII4. При этом Sheet получается защищенным после сохранения файла. При создании все св-ва SheetProtection выставленны в фальш. wookbook также не защищенна. Никто не сталкивался с подобным? В чем может быть дело?
Автор: ZBEP
Дата сообщения: 22.12.2010 20:55
И кста, мне не очень срочно нужно, но после НГ планировал начать работать над серверной частью игры.
И если кто-то знает великий секрет того, как сделать так, что бы IdTCPServer мог отсылать команды IdTCPClient, без наличия в программе-сервера TCPClient и наличия в программе-клиента IdTCPServer, то пожалуйста поделитесь этим секретом)
Т.е. Я планирую что программа-сервер будет отдельно распространяться и все клиенты будут коннектиться к нему (если выбран интернет режим, а не сетевой).
Т.е. На клиенте во время интернет режима активен будет только TCPClient, он должен отсылать команды серверу и принимать их от него.
На сервере должен быть активен только IdTCPServer, он должен принимать и отсылать команды клиенту.

П.с.
Не хочется просто делать по корявому, в данный момент сервер может только принимать, а клиент отсылать, не правильно как-то это.

П.п.с.
Еще такой глупый вопрос, пока нет возможности потестить и выяснить как правильнее.
Порты у клиентов, при активном подключении (Клиент <- Сервер -> Клиент или Клиент/Сервер <-> Клиент/Сервер), обязательно должны быть разные или нет?
Если обязательно должны быть разные, то как правильнее узнать какие порты уже заняты, что бы подключиться под индивидуальным портом?

Ну и если есть советы по поднятию игрового сервера, то будет интересно почитать.
Автор: ZBEP
Дата сообщения: 26.12.2010 03:18
Как idTCPServer -ом разорвать установленное соединение?
Я уже пробовал IdTCPServer1.Free; , но он виснет и все тут.
Конечно можно криво сделать, например при отключении программы-сервера, клиент (который находится на программе сервераа, потому что я хз как отправлять сообщения непосредственно сервером) посылал команду программе клиента, при получении которой клиент отключался удаляя соккет.
Автор: Frodo_Torbins
Дата сообщения: 26.12.2010 11:23
ZBEP
Может вам лучше будет начать с основ: http://delphikingdom.com/asp/viewitem.asp?catalogid=1021 Так у вас по крайней мере будет полная свобода действий и контроль над ситуацией. Плюс еще в делфи 7 были более простые надстройки над сокетами - TTcpClient и TTcpServer.
Автор: ZBEP
Дата сообщения: 26.12.2010 15:31
Frodo_Torbins, ох спс, как же все с серверами этими не удобно XD
Начинаю опять подумывать над переходом на IRC сервер, там вроде и двухстороннюю связь делал уже между клиентом и сервером (а не клиент-сервером и клиент-сервером).

П.с.
Да все таки через IRC для меня проще будет.

С учетом подключений разобрался, делаю так:

Код: var List: TList;
begin
try
List:=IdIRCServer1.Contexts.LockList;
IdIRCServer1.Contexts.UnlockList;
except
end;

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.