Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
21st
Фев
Layered в windows. Использование слоев
Многие профессионалы и новички в программировании под Windows задаются вопросом, как создавать окна необычной формы с использованием различных эффектов, таких как тени, к примеру. Такие окна часто можно встретить в виде виджетов/дополнений на рабочем столе Windows 7/Vista или же заставки при запуске приложений – к примеру, Photoshop (все мы помним то перышко, выходящее за границу прямоугольника). Также имеет смысл создавать подобные окна с полноценными элементами управления: данная технология позволяет форматировать вывод окна попиксельно, то есть можно настроить прозрачность и цвет любого пикселя окна вашего приложения – разве не здорово?
20th
Фев
Беспроводная сеть масштаба микрорайона. Часть 2
В первой части нашего материала уже было сказано, что в качестве основной операционной системы для серверов сети была выбрана платформа Windows. Почему не Linux или, например, FreeBSD? Закономерный вопрос, причин такого выбора несколько…
20th
Маленькие помощники программиста. Часть 2
Часто самой большой проблемой программиста становится сохранение проекта в целости и сохранности. Как не допустить уничтожения проекта в процессе работы и создать сайт для любого браузера – об этом вы узнаете в статье «Маленькие помощники программиста».
Алексей Шишкин
by AlexCones http://flsoft.ru
В этой части нашего «путешествия» по обстановке программиста будущего я бы хотел рассказать о таком важном слове, как бекап*, и о моем «уголке веб-девелопера».
(англ) BackUp – резервная копия
Итак, начнем с бекапов, как самого важного в жизни программистов. Да, вы не ослышались, это важнее, чем знать в совершенстве какой-либо язык программирования, ибо, если дать двум программистам, новичку и профессионалу, в руки среду разработки и дать инструмент бекапа только в руки новичка, при повреждении данных именно он выйдет победителем. Итак, начнем. Для начала нам понадобится OpenSource** программа 7zip и Delphi-образная (к примеру, Lazarus) среда разработки.
- Для начала создадим на жестком диске папку, куда будем складывать наши бекапы (см. рисунок 1):
Рис. 1. Создаем директорию*** для копий
- Определившись с папкой, загружаем утилиту 7z http://www.7-zip.org
- Устанавливаем ее в папку по вашему усмот- рению. Отныне я буду называть ее %7ZFolder%, а папку, которую мы создали для хранения бекапов, – %CopyFolder%.
- Теперь зайдем в %7ZFolder% и создадим там *.txt файл следующего содержания:
7z.exe a %DATE%.7z D:\Finder
Move %DATE%.7z D:\Copy\Finder\
Cd D:\Copy\Finder
Renamer %DATE%.7zГде, в данном случае: D:\Finder – папка проекта, который мы будем бекапить, D:\Copy\Finder – %CopyFolder%.
- Переименовываем этот файл в *.bat
- Но что же значит загадочный Renamer? Его созданием мы сейчас и займемся.
- Открываем среду разработки и, создав Console Application, пишем:
Program Renamer;
Uses Windows, SysUtils;
Var
Name1, Name2,S : String;
I : Integer;
Begin
Name1 := ParamStr(1);
S := Name1;
Name2 := »;
While Pos(‘\’,S)<>0 Do Begin
Name2 := Name2 + S[1];
Delete(S,1,1);
End;
For I := 1 to Length(S) — 2 Do
Name2 := Name2 + S[I];
Name2 := Name2 + TimeToStr(Time) + S[Length(S)-2] +
S[Length(S)-1] + S[Length(S)];
For I := 1 To Length(Name2) Do
If Name2[I] = ‘:’ Then Name2[I] := ‘.’;
RenameFile(Name1, Name2)
end.Думаю, не надо пояснять, что делает этот код. Компилируем его и отправляем Renamer.exe в %CopeFolder%.
* Комментарий автора.
С открытым исходным кодом, распространяющаяся по лицензии
GNU GPL.* Комментарий автора.
Имена для папок желательно выбирать короткими и без кириллицы: будет меньше проблем с *.bat файлом. - Вернемся к нашей основной мысли: как же нам запустить все это вместе? Создадим новый проект (как и прошлый, он будет Console Application). Обратите внимание, что в обоих случаях строк {$ Console Application} НЕ БУДЕТ. Сделано это для того, чтобы консоль не мозолила нам глаза:
program Watcher;
uses ShellAPI, Windows;
Var
Look : Boolean = FALSE;
Gotcha : Boolean = FALSE;
Hand : Integer;
Begin
While True Do Begin
(* Search for Lazarus *)
Hand := 0;
Hand := FindWindow(‘Window’, ‘Lazarus IDE v0.9.28.2 бета — Finder.lpi’);
Gotcha := (Hand <> 0);
If (Look) And Not(Gotcha) Then Begin
ShellExecute(0,‘Open’,‘D:\Programs\7-Zip\Arc.bat’, Nil, Nil, SW_HIDE);
Look := FALSE;
End
Else If Not(Look) And (Gotcha) Then Look := TRUE;
Sleep(10 * 1000);
End
End.Разумеется, следует заменить директории в коде на свои. Обратите внимание, что я использовал для поиска заголовок и класс окна лазаруса, так как свой проект я создаю в нем. Замените их на класс и заголовок окна своей среды разработки.
- Итак, мы почти пришли, осталось поместить ярлык на эту программу в папку ПУСК ? Все программы ? Автозагрузка, и дело сделано. Теперь достаточно перезагрузить компьютер или вручную запустить Watcher.exe, и система начнет работать. Как же она работает? Очень просто:
Watcher раз в 10 секунд ищет заголовок и класс среды разработки с открытым проектом для бекапа:
- если она найдена, флаг Gotcha будет >0;
- продолжаем следить за процессом, и если окно не будет найдено, действуем;
- запускается bat файл Arc.bat;
- он бекапит папку с проектом и дает ей имя сегодняшней даты;
- затем он отправляет его Renamer`у, который переименовывает его согласно дате и времени.
Результат наших действий (см. рисунок 2):
Рис. 2. Часть бекапов в папке после часа работы (чтобы уменьшить их количество, измените число после Sleep в большую сторону)
Итак, мы научились бекапить свои проекты, и теперь перебои электричества и повреждения жесткого диска нам не страшны. Только не забывайте хотя бы изредка сбрасывать свои бекапы на съемный диск или CD/DVD.
Перейдем ко второй части нашего рассказа
ведь я еще обещал рассказать про свой «уголок» веб-девелопера… Понадобилось мне как-то сваять в блокноте сайт для одного из своих проектов. Разумеется, я обладал некоторыми основами сайтостроения, но, разумеется, я (как и большинство веб-девелоперов) не знал заранее, как сайт будет выглядеть во всех браузерах.
И сейчас расскажу, как я избавился от этой проблемы.
Для создания этого древнего заклинания нам потребуется:
- артефакт «Флеш карта» размером от 1 Гб; доступ в Интернет на 15-20 минут;
- Delphi-образная среда разработки;
- 10 минут приготовлений.
Итак, переходим на сайт http://torwald.ru/72 и выкачиваем ВСЕ браузеры, которые видим. По очереди запускаем инсталляторы и устанавливаем их на флешку. Некоторые из браузеров даже не потребуют установки – их просто копируем.
Далее пробуем воссоздать такую схему (см.рисунок 3):
Рис. 3. Папки с программами
Теперь, когда мы все это установили, объединим все это одним заклинани- ем, чтобы не утруждать себя чтением древних свитков каждые пять минут:
Uses ShellAPI, Windows;
Var
FileName : String;
CurDir : String;
F : TextFile;
Begin
FileName := ParamStr(1);
CurDir := ‘H:\WEB’;
AssignFile(F, CurDir + ‘\Run.bat’);
Rewrite(F);
WriteLn(F, CurDir + ‘\InternetExplorer-6\ie6.exe ‘ +FileName);
WriteLn(F, CurDir + ‘\InternetExplorer-7\ie7.exe ‘ +FileName);
WriteLn(F, CurDir + ‘\InternetExplorer-8\ie8.exe ‘ +FileName);
WriteLn(F, CurDir + ‘\Chrome-4.0\Chrome.exe ‘ + FileName);
WriteLn(F, CurDir + ‘\Safari-3.2\safari.exe ‘ + FileName);
WriteLn(F, CurDir + ‘\Firefox-2\firefox2.exe ‘ + FileName);
WriteLn(F, CurDir + ‘\Firefox-3\firefox3.exe ‘ + FileName);
WriteLn(F, ‘pause’);
CloseFile(F);
ShellExecute(HWND(0), ‘Open’, PChar(‘Run.bat’), »,
PChar(‘H:\WEB’), SW_SHOWNORMAL);
End.
Вместо H:\ следует подставить букву диска своей флешкарты. Поместим эту программу в папку WEB на флешкарте и создадим ярлык на ней, который поместим в директорию C:\Documents and settings\%Username%\SendTo. Не забудьте переименовать ярлык в WEB test.lnk
Все, заклинание готово! Запускать его будем так: клик правой кнопкой на HTML\HTM документ, который необходимо проверить, и выбираем ОТПРАВИТЬ – WEB test. Документ откроется по очереди в разных браузерах, и вы сможете увидеть, как он выглядит у пользователей.
Заключение
При разработке использовалась среда разработки – Lazarus 0.9.28 и блокнот. Дело шло, как ни странно, под «окошками».
Итак, мы научились сохранять свои проекты в условиях глобальных катаклизмов и создавать сайты для каждого браузера. Это лишь часть знаний, которые помогут вам в жизни, но надеюсь, что когда-нибудь они вам пригодятся.
Удачи!
Ссылки
- 7zip архиватор http://www.7-zip.org
- Portable версии браузеров http://torwald.ru/72
- Скачать среду разработки Lazarus http://www.lazarus.freepascal.org
Статья из седьмого выпуска журнала «ПРОграммист».
Обсудить на форуме — Маленькие помощники программиста. Часть 2
20th
Может-ли ПО работать быстрее или взгляд изнутри
В наше время повсеместно используются компьютеры. Современный человек просто не представляет свою жизнь без компьютера. На сегодняшний день программные и технические средства ЭВМ развиваются очень быстро. Увеличивается скорость выполнения операций. В связи с этим многие пользователи и начинающие программисты считают, что с помощью современного компьютера можно «в лоб» решить любые задачи и, к сожалению, не задумываются, что при решении многих задач можно сэкономить как компьютерные, так и временные ресурсы. Конечно, при написании простых обывательских программ эти вопросы не актуальны. Но, когда речь заходит о таких серьезных отраслях как: криптография, архитектура, дизайнерские и графические приложения, то эти вопросы становятся очень актуальными и важными. Ведь при реализации этих приложений нужно проводить сложные математические вычисления. Важно, чтобы эти вычисления проходили быстро, так как таких вычислений нужно проводить очень много за малый промежуток времени. А в связи с этим важно, чтобы эти вычисления были реализованы оптимальным и экономичным способом.
18th
Фев
История одного лексического анализатора
В данной статье будет рассмотрено самостоятельное построение лексического анализатора (далее ЛА). В нем нуждаются как начинающие программисты (желая получить больше свободы и писать так, как вздумается), так и опытные (с целью поддержки собственных API, создания скриптов)…
8th
Ноя
ВВЕДЕНИЕ
Фракталы — это геометрические объекты с удивительными свойствами: любая часть фрактала содержит его уменьшенное изображение. То есть, сколько фрактал не увеличивай, из любой его части на вас будет смотреть его маленькая копия. Эти удивительные фигуры стали широко известными в 70-х годах прошлого века благодаря Бенуа Мандельброту, работавшему тогда математическим аналитиком в фирме IBM. Он придумал и само слово «фрактал», которое образовано от латинского fractus — «дробный». В математике эти необычные объекты встречались то здесь, то там с конца девятнадцатого века. Но именно Мандельброту удалось собрать эти разрозненные сведения, увидеть общее в многообразии и указать на важность этого открытия.
Кроме самоподобия, фракталы замечательны еще и тем, многие из них удивительно похожи на то, что мы встречаем в природе. Снежинку, морского конька, ветви деревьев, разряд молнии и горные массивы можно нарисовать, используя фракталы. Поэтому многие современные ученые говорят о том, что природа имеет свойство фрактальности.
Цель данной научно-практической работы состоит в поиске способа легкого представления сложных неевклидовых объектов, образы которых весьма похожи на природные.
* — Б. Мандельброт «Фрактальная геометрия природы».
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы – геометрия природы
Crypt – Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
8th
КОРРЕКТИРУЮЩИЕ КОДЫ
В качестве примера рассмотрим код Хэмминга. Пусть требуется передать некоторое слово 1010. При кодировании оно будет представлено как 1011010, где 1-й, 2-й и 4-й разряды проверочные (слева направо 101), а остальные информационные. Если при передаче произошла ошибка, например в 3-м разряде вместо 1 получен 0, то при декодировании проверочные разряды примут значения: 1-й (младший) — 1, 2-й — 1, 4-й — 0 (т. е. 011). Несовпадение кодовых комбинаций проверочных разрядов не только сигнализирует о наличии ошибки, но и указывает номер искажённого разряда (011 — 3 в двоичном коде).
Корректирующая и обнаруживающая способность кодов зависит от кодового расстояния d между словами, численно равного минимальному числу ошибок, которое может превратить одно слово в другое. Например, имеется кодовая комбинация: 0111100; 0100101; 0010110. Первая группа (слово) отличается от второй в трёх разрядах, вторая от третьей — в четырёх разрядах, первая от третьей — в трёх разрядах. Минимальное расстояние d между этими словами равно 3. Если в первом слове произойдёт 3 ошибки, то оно может превратиться либо во второе, либо в третье слово; при декодировании такая ошибка не будет обнаружена. Максимальное число ошибок, которое в данном случае может быть обнаружено, равно 2. Если в первом слове произошла ошибка во втором разряде, то полученное слово отличается от второго в четырёх разрядах, от третьего — в двух разрядах, от первого — в одном разряде. Согласно максимального правдоподобия методу, при декодировании делается вывод, что, вероятнее всего, передавалось первое слово. Для правильного декодирования нео бходимо, чтобы максимальное число ошибок в передаваемом слове превращало его в слово, отличающееся от исходного в наименьшем числе разрядов. Чтобы исправлять все комбинации из t ошибок, необходимо и достаточно, чтобы d ? 2t+ 1.
Ошибки в передаваемых словах могут возникать вследствие либо независимых искажений разрядов (в этом случае применяют, например, коды типа кода Хэмминга), либо искажений группы рядом стоящих разрядов (для таких случаев разработаны коды, исправляющие одиночные пачки ошибок, и коды, исправляющие более одной пачки ошибок); для обнаружения ошибок в процессе вычислений на ЭВМ разработаны так называемые арифметические коды.
Лит.: Питерсон У., Коды, исправляющие ошибки, пер. с англ., М., 1964.
Г. Н. Оныкий.
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы – геометрия природы
Crypt – Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
8th
ЗАПЯТАЯ ФИКСИРОВАННАЯ
А. В. Гусев.
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы – геометрия природы
Crypt – Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
8th
МОНИТОР
Для начала узнаем, с какой видеокартой мы работаем:
procedure TForm1.Button1Click(Sender: TObject);
var
lpDisplayDevice: TDisplayDevice;
dwFlags: DWORD;
cc: DWORD;
begin
Memo1.Clear;
lpDisplayDevice.cb := sizeof(lpDisplayDevice);
dwFlags := 0;
cc := 0;
while EnumDisplayDevices(nil, cc, lpDisplayDevice, dwFlags) do
begin
Inc(cc);
Memo1.lines.add(lpDisplayDevice.DeviceString);
end;
end;
Теперь разместим на форме ListBox и Button. В обработчике создания формы пишем:
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
DevMode: TDevMode;
begin
i:=0;
while EnumDisplaySettings(nil,i,DevMode) do
begin
with Devmode do
ListBox1.Items.Add(Format(‘%dx%d %d Colors’,
[dmPelsWidth,dmPelsHeight,1 shl dmBitsperPel]));
Inc(i);
end;
end;
Вы увидите все возможные комбинации разрешений и цветов, которые поддерживает дисплей. Теперь пишем в нажатии на кнопку:
procedure TForm1.Button1Click(Sender: TObject);
var
DevMode: TDeviceMode;
liRetValue: Longint;
begin
if EnumDisplaySettings(nil,Listbox1.ItemIndex,Devmode) then
liRetValue := ChangeDisplaySettings(DevMode, CDS_UPDATEREGISTRY);
SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0);
end;
function ChangeDisplaySettings(var lpDevMode: TDeviceMode; dwFlags: DWORD): Longint; stdcall;
Параметры:
- lpDevMode Структура с описанием видеорежима, на который мы хотим переключиться.
- dwFlags Определяет как будет изменен видеорежим.
- 0 — Немедленное изменение видеорежима. Установка данного флага возвращает в видеорежим по умолчанию, установленному в реестре, если он был изменен с применением флага CDS_FULLSCREEN, при этом первый параметр функции должен быть nil и флаги равны 0.
- CDS_UPDATEREGISTRY — Видеорежим будет изменен немедленно и информация записана в реестр в пользовательский профиль.
- CDS_TEST — Запрос теста видеорежима средствами Windows
- CDS_FULLSCREEN — Установка видеорежима временна.
- CDS_GLOBAL — Видеорежим будет изменен для всех пользователей данной машины. Иначе видеорежим меняется только для текущего пользователя. Используется вместе с флагом CDS_UPDATEREGISTRY.
- CDS_SET_PRIMARY — Видеорежим становится первичным.
- CDS_RESET — Параметры видеорежима будут изменены, даже если совпадают с текущими.
- CDS_NORESET — Изменения будут записаны в реестр, но не вступят в силу. Используется с флагом CDS_UPDATEREGISTRY
- Возвращаемое значение:
- DISP_CHANGE_SUCCESSFUL Изменения прошли успешно.
- DISP_CHANGE_RESTART Необходима перезагрузка для вступления изменений в силу
- DISP_CHANGE_BADFLAGS Передан неверный набор флагов
- DISP_CHANGE_BADPARAM Неверные параметры.
- DISP_CHANGE_FAILED Драйвер видеоустройства не смог установить режим
- DISP_CHANGE_BADMODE Видеорежим не поддерживается
- DISP_CHANGE_NOTUPDATED Windows NT/2000: Ошибка записи в реестр
После этого Вам достаточно выбрать в ListBox нужную комбинацию и изменить разрешение нажатием на Button.
Внимание:
- Не рекомендуется устанавливать значение видео-режима, который не присутствует в списке доступных. Это может привести к мерцанию экрана либо вообще к исчезновению изображения.
- Многие адаптеры требуют перезагрузку компьютера при смене разрешения.
- SendMessage используется для оповещения всех окна о смене видеорежима.
При изменениях видеорежима генерируется сообщение WM_DISPLAYCHANGE. Необходимо создать обработчик данного сообщения в вашем приложении.
private
procedure WMDisplayChange(var message:TMessage); message WM_DISPLAYCHANGE;
//…
procedure TForm1.WMDisplayChange(var message: TMessage);
begin
ShowMessage(‘Какие-то параметры дисплея изменили!’);
inherited;
end;
Programming articles
Создание сайтов на шаблонах
Множество вариантов работы с графикой на канве
Шифруем файл с помощью другого файла
Перехват API функций — Основы
Как сделать действительно хороший сайт
Создание почтового клиента в Delphi 7
Применение паскаля для
решения геометрических задач
Управление windows с помощью Delphi
Создание wap сайта
Операционная система unix, термины и понятия
SQL враг или друг
Возникновение и первая редакция ОС UNIX
Оптимизация проекта в Delphi
Ресурсы, зачем нужны ресурсы
Термины программистов 20 века
Советы по созданию собственного сайта с нуля
Шифруем файл с помощью пароля
Фракталы — геометрия природы
Crypt — Delphi программа для шифрования
Рассылка, зачем она нужна и как ее организовать?
Учебник по C++ для начинающих программистов
Уроки для изучения ассемблера
Загадочный тип PCHAR
Средства по созданию сайтов
Операторы преобразования
классов is и as
Borland Developer studio 2006. Всё в одном
Создание базы данных в Delphi, без сторонних БД
Software engineering articles
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)