Понедельник, 06 Апреля 2026, 17:51

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
TimKruzДата: Пятница, 27 Января 2012, 22:10 | Сообщение # 1501 | Тема: out of memory
старожил
Сейчас нет на сайте
Quote (kvestpro)
комп у меня достаточно мощный (4 ядра 3.2 ггц, 8 гб озу, 1 гб видео,) не супер,но эта прога должна летать, а она не летает

А почему, собственно, она должна "летать"? Она и так неплохо работает... Шифровка сложными алгоритмами всегда занимает много времени и ресурсов...
Quote (karuy)
Нет, писал же поправил. Запусти посмотри, еррора нет - шифрует коректно. Если не заметил что, вот:

Понятно.


TimKruzДата: Пятница, 27 Января 2012, 22:52 | Сообщение # 1502 | Тема: Delphi 7 картинка
старожил
Сейчас нет на сайте
Не совсем ясно, что именно требуется...
Вывести картинку после выхода из программы - значит потерять над ней контроль, и, как следствие, допускать полное её стирание другими окнами.
Самый простой способ, при котором программы видно не будет, но будет выводиться картинка, при чём непрерывно: создай новый проект, выбрав в меню File - New - Other... - Console Application, потом, удалив всё из окна редактора, и скопируй следующее:
Code
uses windows, graphics; //Обязательные модули для использования WinAPI и графики
var display:HDC; image:tbitmap; //Указатель на экран и объект для хранения картинки
begin
   image:=tbitmap.Create; //Создаём объект для хранения картинки
   image.LoadFromFile('картинка.bmp'); //Загружаем картинку из файла
   display:=getdc(0); //Создаём указатель
   //Далее бесконечно выводим картинку из объекта на экран.
   while true do bitblt(display,0,0,image.Width,image.Height,image.Canvas.Handle,0,0,SRCCOPY);
end.

У функции BitBlt следующие параметры: указатель на принимающий объект, координаты на принимающем, размеры картинки по ширине и высоте, указатель на передающий объект, координаты на передающем объекте, тип копирования (SRCCOPY - просто скопировать). В данном случае мы выводим картинку определённого размера в точку (0;0) экрана. Чтобы она не стиралась окнами, заключаем эту операцию в цикл (можно и без цикла, или цикл определённой длительности).
Программу из примера после запуска (не из среды Delphi, в ней можно нажать Ctrl+F2 для останова) можно убрать только через диспетчер задач.
Чтобы вывести на весь экран, нужно просто загрузить картинку размером с экран.
Картинку можно упаковать в exe, для этого с помощью Image Editor'а создай res-файл (файл ресурсов), в нём - bmp-картинку, сохрани рядом с исходником программы, в программе, где-нибудь в начале, например, после uses или после var, допиши: {$R название.res}, где название - название res-файла. Вместо image.LoadFromFile() напиши image.LoadFromResourceName(HInstance, 'имя картинки в файле ресурсов') для загрузки по имени или image.LoadFromResourceID(HInstance, номер) для загрузки по идентификатору (если других картинок нет, то 0).


TimKruzДата: Пятница, 27 Января 2012, 23:14 | Сообщение # 1503 | Тема: Очень срочно профи дельфи помогите
старожил
Сейчас нет на сайте
Quote (0x90)
Самому обрабатывать WM_CLOSE.

Зачем? Можно ведь в событии OnCloseQuery написать CanClose:=false, и всё. Ну, это если программа с формой, а не консоль.
Quote (0x90)
Сделать так, чтобы прога не вырубалась из диспетчера значительно сложнее.

Тут можно либо скрыть её из диспетчера (хотя, вроде бы, это работает только на старых системах), либо присвоить название типа svchost (имя какой-то службы, это чтобы запутать пользователя), либо сделать две программы, которые взаимно друг друга восстанавливают и запускают, либо назвать программу типа lsass.exe, winlogon.exe и т.п., и через стандартный диспетчер задач Windows завершить, но можно завершить через другой диспетчер...
А вообще, VipCat, покопайся в интернете. Существует большое количество гигантских форумов профессиональных программистов, где эти и похожие темы рассматривались уже десятки раз... И на них уже есть точные ответы...

***
VipCat, можешь ещё вот тут посмотреть предпоследнее сообщение, там описано кое-что:
Quote
если этот процесс прибить то система вывалится в BSOD со статусом 0xF4: CRITICAL_OBJECT_TERMINATION (http://msdn.microsoft.com/en-us/library/ff560372(v=VS.85).aspx)




Сообщение отредактировал TimKruz - Пятница, 27 Января 2012, 23:25
TimKruzДата: Пятница, 27 Января 2012, 23:32 | Сообщение # 1504 | Тема: DosBox эмулируем DOS приложения/игры
старожил
Сейчас нет на сайте
Кажется, DOS'овские игры легко (хотя могут быть, конечно, некоторые проблемы совместимости) запускаются на XP/Vista/Seven, правда, только на XP - во весь экран.
Quote (Igroman)
Вариант с тем, чтобы сразу же перейти в нужную директорию не прокатит, поэтому переходим по одной папке, пока не дойдём до нужной.

А вариант прописать cd (он же chdir) dosgames/blabla/blabla не прокатит?


TimKruzДата: Суббота, 28 Января 2012, 15:58 | Сообщение # 1505 | Тема: DosBox эмулируем DOS приложения/игры
старожил
Сейчас нет на сайте
Quote (Igroman)
По поводу совместимости, так работать то может и будут, но не всегда корректно. При том DosBox не только под Xp/Vista/Seven, но и под другие системы, что не мало важно.

Я использую только AnDosBox - DosBox для Android. На электронной книге под Android можно играть в некоторые ретро-игры и программировать. biggrin Жалко, что скорость эмуляции довольно маленькая... На компьютере в десятки раз быстрее... Или это у меня устройство слабое...
Кстати, AnDosBox сразу закрепляет SD-карту как диск C, и настраивать ничего не приходится...

Ещё, для справки, допиши, что название папок и файлов (до точки) желательно английскими буквами без пробелов и не больше 8 символов. Иначе вместо, например, Program Files придётся вводить что-нибудь типа Progra~1, и если есть несколько папок/файлов с одинаковым началом названия, сложно попасть туда, куда надо...




Сообщение отредактировал TimKruz - Суббота, 28 Января 2012, 16:00
TimKruzДата: Суббота, 28 Января 2012, 16:30 | Сообщение # 1506 | Тема: Создаем сайт с нуля.Пособие для новичков.
старожил
Сейчас нет на сайте
ifelse, это на урок даже не похоже. Урок - учит. Написать несколько строчек в блокноте и открыть браузером - думаю, пытались все. Так что ничего нового и интересного или полезного ты не рассказал.
Разберу кратко твои ошибки.
Во-первых, старайся после знаков препинания ставить пробелы. Разве это так сложно? Или с телефона пишешь? huh
Во-вторых, из Википедии ничего копировать не надо. Кто хочет - сам в Википедии всё прочитает.
В-третьих, теги <html>, <head>, <body> не обязательные, в принципе, можно писать страницу сразу, без заголовка, и браузер поймёт. Кстати, мог бы написать, что теги бывают одиночные и парные, а также целые конструкции. У парных закрывающий тег имеет в себе знак косая черта - "/", это отличает его от открывающих. Открывающий может содержать дополнительные параметры... А потом просто указывать, какие теги парные, а какие - одинарные...
Quote (ifelse)
Из Википедии:HTML (от англ. HyperText Markup Language — «язык разметки гипертекста») — стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузерами и отображается в виде документа, в удобной для человека форме.
Для новичков понять,что здесь написано давольно трудно.Поэтому я дам свое определение html.Html - это язык разметки гипертекста.Все просто и понятно,не так ли?

Я один не почувствовал абсолютно никакой разницы? blink
Quote (ifelse)
Давайте уже создадим первую страничку:
1)Открывайте любой редактор текста.Я использую Блокнот.
2)Пишем в редакторе <html>Моя первая страничка </html>
3)Сохраняем:Файл-Сохранить как ...
4)Имя файла: index.html
5)Тип файла: Все файлы
6)Кодировка: UTF-8

Поверь мне - "блокнотом" умеет пользоваться любой пользователь... Ты бы ещё написал, как этот блокнот открыть... Достаточно было написать "Откройте «Блокнот», напишите в нём «...» и сохраните под именем index.html".
Quote (ifelse)
Теперь разберемся,что такое <html>

А может лучше сначала описать всё это, и только потом приводить код?
Quote (ifelse)
Итак,после поправок в коде он должен выглядеть так:

После каких поправок? Ты описал несколько тегов, и? Ты же не сказал даже, куда их вставлять нужно. Новичку придётся разбираться в приведённом коде, чтобы понять, какой тег куда засовывать...
Quote (ifelse)
На следующем уроке мы создадим полноценный сайт с приятным дизайном!

На первом уроке - обрубок страницы с одной строчкой, а на следующем - сразу полноценный сайт с приятным дизайном?!! Не кажется ли это слишком резким скачком?..
Quote (ifelse)
В архиве содержатся все файлы,которые мы создали на уроке.Если вам лень создавать самим,можете просто скачать.

Ааа, мне лень создать txt-файл и написать в нём одну строчку!.. biggrin Не смешите людей. В первом уроке могли бы обойтись без всяких архивов. Кстати, ссылочку могли бы оформить в виде нормальной гиперссылки.
Quote (ifelse)
См.рис.1 в архиве

А залить этот рисунок, например, на RGhost.ru и с помощью bb-кода [img] вставить в текст тут нельзя было?..
Quote (ifelse)
и мы начнем создавать сайт с нуля на html.Когда наш сайт будет готов,мы перейдем к сайтостроению на php.

Смысла создавать на чистом html нет... Html пригодится только тогда, когда будете писать на php...

Кстати, тут у меня где-то валяется книжка по PHP, там как раз создание сайта с нуля... Потом найду, дам ссылку...

P.S. Удачи в написании уроков, может быть, получится что-то реально хорошее. smile

***
Может быть, эта тема должна была быть в разделе "Вебмастеринг"? HTML - это не скриптовый язык программирования.

Да и вообще, ifelse, мог бы красиво оформить сообщение. Используя BB-коды (фактически, те же теги, только потом обрабатываются). А то человек, который сам плохо оформляет свои сообщения, вряд ли научит делать хороший дизайн... huh




Сообщение отредактировал TimKruz - Суббота, 28 Января 2012, 16:33
TimKruzДата: Суббота, 28 Января 2012, 22:37 | Сообщение # 1507 | Тема: Ошибка в VB!
старожил
Сейчас нет на сайте
Quote (Duskly)
Короче переустановил винду, запускаю VB, пишет нет файла dao350.DLL
Скачал его, перенес в папку с студией, далее такая ошибка:

Ну так не тот файл скачал значит. Другой версии с тем же названием, например... Или ещё чего-то не хватает...
dao350.DLL - это компонент какой-то Микрософтской штуки, с помощью которой работает VB. Видимо, в твоей установке винды этой штуки нет...
Проще всего переустановить всю студию полностью, со всеми компонентами, предварительно снеся то, что осталось от старой.
Quote (Duskly)
Скрин

Мог бы словами написать: "Неожиданная ошибка, выхожу"...




Сообщение отредактировал TimKruz - Суббота, 28 Января 2012, 22:38
TimKruzДата: Суббота, 28 Января 2012, 22:45 | Сообщение # 1508 | Тема: Реально ли такое?
старожил
Сейчас нет на сайте
1.) Нет, ptt и pttx по умолчанию открываются лоадером Power Point. А исполнять в Windows можно только файлы типа *.com и *.exe, кажется, больше ничего.
2.) Можно, конечно. Но что значит - не скачка? Т.е. чтобы не сохранялся, что ли? Ну это просто. Просто не сохраняй, и всё. biggrin Просто делаешь http-запрос типа "имя_сервера/файл.txt" на сервер, и сервер тебе возвращает строчку в виде содержимого этого файла. Дальше ты можешь её сохранить как файл, вывести на экран или сделать что-то ещё. Запрос сделать можно разными способами (с точки зрения программиста); на этот счёт ищи в интернете, там много про это есть...




Сообщение отредактировал TimKruz - Суббота, 28 Января 2012, 22:45
TimKruzДата: Суббота, 28 Января 2012, 22:49 | Сообщение # 1509 | Тема: Ошибка в VB!
старожил
Сейчас нет на сайте
Quote (Duskly)
кстати такой вопрос, вот вконце просит типа, как вы хотите использовать студию, С++ или C#.
Я выбрал C#, а можно патом переключиться на С++?

Да можно, наверняка. Это типа приоритетный режим выбирается, какой будешь использовать в первую очередь...


TimKruzДата: Суббота, 28 Января 2012, 22:52 | Сообщение # 1510 | Тема: Реально ли такое?
старожил
Сейчас нет на сайте
Duskly, вот, это на счёт второго вопроса...

TimKruzДата: Воскресенье, 29 Января 2012, 18:04 | Сообщение # 1511 | Тема: Реально ли такое?
старожил
Сейчас нет на сайте
Quote (Duskly)
просто у меня ярлыка не было на столе. в папке не нахожу(

В таких случаях я просматриваю все папки с системой, и запускаю самый большой exe-файл (остальные - утилиты или типа того). Чаще всего в bin находиться должен.


TimKruzДата: Воскресенье, 29 Января 2012, 20:43 | Сообщение # 1512 | Тема: Мой видос про Тюрягу
старожил
Сейчас нет на сайте
Quote (Duskly)
Мой видос про Тюрягу

Я думал, тут будет про реальную тюрьму, что ли... А так, это в раздел "Обсуждение игр" надо...

В принципе, "ВК" и его игры - реальный способ хорошо и вполне легально заработать на школьниках и некоторых офисных работниках... Так что, смотря с точки зрения разработчика - "ВК" вполне хорошая система, а вот с точки зрения рядового пользователя - всё ещё на низком уровне (очень слабая цензура и модерация, ограниченные функции, нельзя вставлять контент извне, нет нормальных BB-кодов и смайлов, всё вечно глючит, нельзя сменить дизайн и прочие недоработки).




Сообщение отредактировал TimKruz - Воскресенье, 29 Января 2012, 20:51
TimKruzДата: Воскресенье, 29 Января 2012, 21:16 | Сообщение # 1513 | Тема: Создадим Блендермена
старожил
Сейчас нет на сайте
vicmad, а смысл? Для чего этот "блендермен" нужен? И почему только для "Блендерцов сайта GCUP", почему не для всех "блендерцов"?
Quote (vicmad)
а не желающих заставить (например можно не пускать на сайт пока не будет прислана хотя бы одна концепт работа по данной теме).

Не смешная шутка.
Quote (vicmad)
3. Создание роликов в жанре "Блендермэн против Фотожопа" или "Blendermen & Gimpman VS Mayaman $ Dr. EvelBrush"

Какая связь между бледером (3D) и фотшопом (2D)? И что за Dr. EvelBrush (о многих редакторах слышал, а этот впервые встречаю)?
ИМХО, лучше не ролики (ну, там анимация сложная, рендить по кадрам долго и всё такое), а 3D-комиксы что ли. Или вообще игру, всё-таки сайт по игрострою.

vicmad, а самому, фантазии не хватит придумать? Попробуй, нарисуй и покажи.
Я, например, совершенно не могу представить образ "Блендермена". wacko Ну, если только костюм какого-то цвета со стилизованной буквой "Б"... biggrin Но это банально.


TimKruzДата: Понедельник, 30 Января 2012, 09:25 | Сообщение # 1514 | Тема: Помогите выбрать программный язык для изучения
старожил
Сейчас нет на сайте
Quote (STARxWARS)
Вопрос не по теме, хотелось бы узнать как взламывают сервера, делают свои сети, написание зашиты и т.д. Это можно сделать на любом япе или на определенных или что-то еше?

Как - это ищи в сети, много статей есть. А сделать можно практически на любом "серьёзном" языке.
Quote (STARxWARS)
Хотел бы узнать какой из яп'ов лутше изучить первым и продолжать дальше изучать яп'ы по этапно.

Pascal/Delphi или C/C++ на твой вкус.
Quote (STARxWARS)
Хотел бы уточнить, желательно хотелось бы мне выучить яп для написание программ, игры.

Любой. Они все подходят для написания игр. Delphi/C++, например. Другое дело, что на C++ движков больше.


TimKruzДата: Четверг, 02 Февраля 2012, 22:31 | Сообщение # 1515 | Тема: Как вы считаете миллисекунды для каждого кадра?
старожил
Сейчас нет на сайте
Для точных процессов использую WinAPI-функцию GetCurrentTime...
Quote (Xe|N|o)
Правда, очень сильно опечаливает факт, что Windows плохо миллисекунды считает.

Плохо считает таймер Windows (который стандартный), но в остальном всё нормально. А ещё можно ведь опрашивать часы на материнской плате, через БИОС, что ли... Точнее их ничего не получишь...


TimKruzДата: Четверг, 02 Февраля 2012, 22:41 | Сообщение # 1516 | Тема: помогите преобразовать файлы выполненные на Pascal в Delphi
старожил
Сейчас нет на сайте
Хоттабыч, переименуй pas в dpr (Delphi PRoject) и добавь в начале программы (после program) директиву {$APPTYPE CONSOLE}. Так твой код будет работать в режиме консоли. Но консоль имеет ограничения по сравнению с эмулятором DOS (через который можно запустить BP/FP программы, если стандартная командная строка Windows почему-то не хочет запускать). Так что от множества функций текстового режима придётся отказаться, а графический режим вообще не поддерживается. Ну и так далее... Гораздо лучше полностью переписать программу, сделав в привычном для Windows стиле...
Хотя вообще странно, почему "она не идёт на современных ОС Windows". Попробуй перекомпилировать исходник с помощью Borland Pascal 7, будет работать во всех Windows. Правда, в Seven не будет на весь экран раскрываться.
Quote (Cre-game)
Ну, насколько я знаю, .pas - это и есть файлы проектов Delphi

Файлы проектов Delphi - DPR, а в PAS хранятся файлы модулей и вообще весь остальной код, по традиции, так сказать.

***
Эх, не заметил этого:
Quote (Хоттабыч)
Файлы расчётные,графические(динамические) и текстовые.

Что значит "файлы графические (динамические)"?.. Если используется графика - то в консольном приложении Delphi сделать не получится. Но, опять же, можно полностью переписывать код в стандартное приложение.
Если есть какие-то проблемы с выводом графики в паскалевских программах - проверьте наличие драйвера или попробуйте сменить драйвер на более подходящий.
***
...Если, например, вы используете инструкцию InitGraph(драйвер, режим, 'путь к драйверу'), проверьте, что по указанному пути присутствует указанный драйвер.




Сообщение отредактировал TimKruz - Четверг, 02 Февраля 2012, 22:48
TimKruzДата: Пятница, 03 Февраля 2012, 21:42 | Сообщение # 1517 | Тема: I was stupid
старожил
Сейчас нет на сайте
Quote (Monteg)
Поздравляю.

Вот какой смысл этого сообщения? Он спрашивает что-то конкретное, ждёт адекватного ответа, а ты его поздравляешь, что он этого не знает. wacko
Quote (ilya7834)
Возьми любой тутор с кодом и просто переводи событи в кнопки. Скажи что надо узнать конкретней.

Конкретнее - как сделать прыжок игрока в GM. А чтобы перевести код на кнопки, нужно знать и код, и кнопки, а он ни того, ни другого не знает.
Quote (ilya7834)
Название темы переводится "я был глупым" dry учи английский.

Quote (Brain_Breaker)
I was подразумевает прошедшее время. В твоем случае тема должна называться I am stupid.

Название темы должно в нескольких словах отражать смысл темы, чтобы было понятно, о чём она и для кого. И на русском языке.
Quote (ЙаСаня)
лучше выучи английский язык.На нём даже легче ГМЛ выучить будет.

Какая связь между английским языком и языком программирования?! Команды можно хоть на китайском выучить, лишь бы знать, что означают.

Robinzon787, такие вещи рассматривались множество раз, были написаны десятки уроков. Достаточно использовать поиск.
Кстати, желательно иметь представление об алгоритмизации (проходят в младших классах на информатике)... Тогда и вопросов таких не будет...


TimKruzДата: Пятница, 03 Февраля 2012, 22:22 | Сообщение # 1518 | Тема: Игра ''Воздушный шар"
старожил
Сейчас нет на сайте
Неплохо...
После прохода уровня предлагается выбрать уровень сложности снова. Всё-таки это окно должно показываться только в самом начале...
Исправляй надписи.
  • "Balloon creator ..." - либо "... created by ...", либо просто "... by ..."
  • "...represents game" - "...presents..." Зачем re?
  • "press space for continuation" - это вообще бред, нужно "press spacebar to continue", или, лучше всего, не пробел, а любую кнопку - знаменитое "press any key"...
  • "creator" (в меню) - обычно пишут "about" или типа того... Хотя тут не важно, что...
  • "complicacy" - лучше что-нибудь типа "difficulty", а вместо "with difficulty" - "hard" (easy/hard - просто/сложно)
  • "To choose level press figure on kevboard" - нажать фигуру на клавиатуре?.. Лучше тут вообще ничего не писать, и так ясно, что цифру на клавиатуре нажать нужно, они же пронумерованы... Хотя лучше бы сделать выбор стрелочками...
    На счёт сложности: уровни не по возрастанию расположены... Прошёл только два или три из них, самых простых...
    Музыка не меняется (только чуть-чуть послушал)? Плохо. Надоедает. Нужно разнообразить. И что значит "The founder of music"? Нашли музыку, а кто её написал не знаете?.. Авторское право нужно соблюдать... Или хотя бы упоминать в титрах об авторах музыки...

  • TimKruzДата: Пятница, 03 Февраля 2012, 23:09 | Сообщение # 1519 | Тема: помогите преобразовать файлы выполненные на Pascal в Delphi
    старожил
    Сейчас нет на сайте
    Quote (Хоттабыч)
    Мне надо чтобы вы сделали так,чтобы файлы сделанные в Turbo Pascal работали в Delphi 7.

    А что за код-то? Опиши. Может быть, там всё переделывать надо, или наоборот, ничего не надо переделывать.
    Quote (sk0rpi0n)
    Да и вообще у меня код из delphi работал в паскале, и наоборот.

    Простые алгоритмы и правда похожи.
    Quote (sk0rpi0n)
    За перевод в однотипных языках я не дал бы больше 100 руб., если программа не двухсотметровая по коду, в котором содержатся ошибки.

    Я бы вообще не взял бы деньги за перевод в однотипных языках двухметрового кода с ошибками. biggrin Если не нужно с нуля переписывать, а только поправить.


    TimKruzДата: Пятница, 03 Февраля 2012, 23:31 | Сообщение # 1520 | Тема: Delphi:Вопрос-Ответ
    старожил
    Сейчас нет на сайте
    Quote (GameMix)
    LunarPixel, не работает. Код:

    ReadKey - это из TurboPascal функция... GameMix, попробуй модуль CRT32, там типа функции CRT-модуля из TurboPascal для консоли Delphi... Вообще, должен быть такой код:
    Code
    {$APPTYPE CONSOLE}
    uses CRT32;
    var key: Char;
    begin
       repeat
         key:=readkey;
         case key of
         #72: writeln('Up!');
         #77: writeln('Left!');
         #80: writeln('Down!');
         #75: writeln('Right!');
         #27: exit; //Escape
         end;
       until false;
    end.

    Однако, readkey из CRT32 почему-то не читает коды кнопок-стрелок... sad Может быть, если поискать, можно найти более свежую версию этого модуля...

    Quote (BASS)
    Здравствуйте. Подскажите, пожалуйста, исходный код функции ShowMessage(в моей поставке все стандартные модули *.dcu, а тащить весь модуль Dialogs.pas ради одной функции совесть не позволяет).

    Вот: biggrin
    Code
    procedure ShowMessage(const Msg: string);
    begin
       ShowMessagePos(Msg, -1, -1);
    end;

    Code
    procedure ShowMessagePos(const Msg: string; X, Y: Integer);
    begin
       MessageDlgPos(Msg, mtCustom, [mbOK], 0, X, Y);
    end;

    Code
    function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
       Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
    begin
       Result := MessageDlgPosHelp(Msg, DlgType, Buttons, HelpCtx, X, Y, '');
    end;

    Code
    function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
       Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
       const HelpFileName: string): Integer;
    begin
       with CreateMessageDialog(Msg, DlgType, Buttons) do
         try
           HelpContext := HelpCtx;
           HelpFile := HelpFileName;
           if X >= 0 then Left := X;
           if Y >= 0 then Top := Y;
           if (Y < 0) and (X < 0) then Position := poScreenCenter;
           Result := ShowModal;
         finally
           Free;
         end;
    end;

    Code
    function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
       Buttons: TMsgDlgButtons): TForm;
    const
       mcHorzMargin = 8;
       mcVertMargin = 8;
       mcHorzSpacing = 10;
       mcVertSpacing = 10;
       mcButtonWidth = 50;
       mcButtonHeight = 14;
       mcButtonSpacing = 4;
    var
       DialogUnits: TPoint;
       HorzMargin, VertMargin, HorzSpacing, VertSpacing, ButtonWidth,
       ButtonHeight, ButtonSpacing, ButtonCount, ButtonGroupWidth,
       IconTextWidth, IconTextHeight, X, ALeft: Integer;
       B, DefaultButton, CancelButton: TMsgDlgBtn;
       IconID: PChar;
       TextRect: TRect;
    begin
       Result := TMessageForm.CreateNew(Application);
       with Result do
       begin
         BiDiMode := Application.BiDiMode;
         BorderStyle := bsDialog;
         Canvas.Font := Font;
         KeyPreview := True;
         OnKeyDown := TMessageForm(Result).CustomKeyDown;
         DialogUnits := GetAveCharSize(Canvas);
         HorzMargin := MulDiv(mcHorzMargin, DialogUnits.X, 4);
         VertMargin := MulDiv(mcVertMargin, DialogUnits.Y, 8);
         HorzSpacing := MulDiv(mcHorzSpacing, DialogUnits.X, 4);
         VertSpacing := MulDiv(mcVertSpacing, DialogUnits.Y, 8);
         ButtonWidth := MulDiv(mcButtonWidth, DialogUnits.X, 4);
         for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
         begin
           if B in Buttons then
           begin
             if ButtonWidths[B] = 0 then
             begin
               TextRect := Rect(0,0,0,0);
               Windows.DrawText( canvas.handle,
                 PChar(LoadResString(ButtonCaptions[B])), -1,
                 TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or
                 DrawTextBiDiModeFlagsReadingOnly);
               with TextRect do ButtonWidths[B] := Right - Left + 8;
             end;
             if ButtonWidths[B] > ButtonWidth then
               ButtonWidth := ButtonWidths[B];
           end;
         end;
         ButtonHeight := MulDiv(mcButtonHeight, DialogUnits.Y, 8);
         ButtonSpacing := MulDiv(mcButtonSpacing, DialogUnits.X, 4);
         SetRect(TextRect, 0, 0, Screen.Width div 2, 0);
         DrawText(Canvas.Handle, PChar(Msg), Length(Msg)+1, TextRect,
           DT_EXPANDTABS or DT_CALCRECT or DT_WORDBREAK or
           DrawTextBiDiModeFlagsReadingOnly);
         IconID := IconIDs[DlgType];
         IconTextWidth := TextRect.Right;
         IconTextHeight := TextRect.Bottom;
         if IconID <> nil then
         begin
           Inc(IconTextWidth, 32 + HorzSpacing);
           if IconTextHeight < 32 then IconTextHeight := 32;
         end;
         ButtonCount := 0;
         for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
           if B in Buttons then Inc(ButtonCount);
         ButtonGroupWidth := 0;
         if ButtonCount <> 0 then
           ButtonGroupWidth := ButtonWidth * ButtonCount +
             ButtonSpacing * (ButtonCount - 1);
         ClientWidth := Max(IconTextWidth, ButtonGroupWidth) + HorzMargin * 2;
         ClientHeight := IconTextHeight + ButtonHeight + VertSpacing +
           VertMargin * 2;
         Left := (Screen.Width div 2) - (Width div 2);
         Top := (Screen.Height div 2) - (Height div 2);
         if DlgType <> mtCustom then
           Caption := LoadResString(Captions[DlgType]) else
           Caption := Application.Title;
         if IconID <> nil then
           with TImage.Create(Result) do
           begin
             Name := 'Image';
             Parent := Result;
             Picture.Icon.Handle := LoadIcon(0, IconID);
             SetBounds(HorzMargin, VertMargin, 32, 32);
           end;
         TMessageForm(Result).Message := TLabel.Create(Result);
         with TMessageForm(Result).Message do
         begin
           Name := 'Message';
           Parent := Result;
           WordWrap := True;
           Caption := Msg;
           BoundsRect := TextRect;
           BiDiMode := Result.BiDiMode;
           ALeft := IconTextWidth - TextRect.Right + HorzMargin;
           if UseRightToLeftAlignment then
             ALeft := Result.ClientWidth - ALeft - Width;
           SetBounds(ALeft, VertMargin,
             TextRect.Right, TextRect.Bottom);
         end;
         if mbOk in Buttons then DefaultButton := mbOk else
           if mbYes in Buttons then DefaultButton := mbYes else
             DefaultButton := mbRetry;
         if mbCancel in Buttons then CancelButton := mbCancel else
           if mbNo in Buttons then CancelButton := mbNo else
             CancelButton := mbOk;
         X := (ClientWidth - ButtonGroupWidth) div 2;
         for B := Low(TMsgDlgBtn) to High(TMsgDlgBtn) do
           if B in Buttons then
             with TButton.Create(Result) do
             begin
               Name := ButtonNames[B];
               Parent := Result;
               Caption := LoadResString(ButtonCaptions[B]);
               ModalResult := ModalResults[B];
               if B = DefaultButton then Default := True;
               if B = CancelButton then Cancel := True;
               SetBounds(X, IconTextHeight + VertMargin + VertSpacing,
                 ButtonWidth, ButtonHeight);
               Inc(X, ButtonWidth + ButtonSpacing);
               if B = mbHelp then
                 OnClick := TMessageForm(Result).HelpButtonClick;
             end;
       end;
    end;

    wacko Ну и так далее... До фига всего... Вот сам модуль, всего-то 80 КБ...


    Поиск:

    Все права сохранены. GcUp.ru © 2008-2026 3d engine Рейтинг