dsp8195 Posted January 9, 2008 Report Posted January 9, 2008 (edited) Название: [Delphi] team Описание сообщества: Тим, объединяющий любителей программирования на Pascal / Object Pascal / Delphi и других схожих языках. Дельфийщики и программеры - это несколько разные понятия. :lol: "Как в пустыне поймать льва и посадить его в клетку?" Вот как решают эту задачу различные деятели эпохи информационных технологий: Программист на Pascal: просматривает пустыню полным перебором. Обнаружив льва, строит вокруг него клетку. Продвинутый программист на Pascal: сортирует пустыню по возрастанию, после чего ищет льва двоичным поиском и строит вокруг него клетку. Если в процессе работы лев уходит, бросает работу с криком "Range Check Error". Программист на C: ищет в пустыне камень и помещает его в клетку. Присваивает камню значение "лев". Программист на C++: проектирует клетку так, чтобы лев был её составной частью. При инициализации клетки лев автоматически генерируется внутри. Программист на Ada: говорит, что лев и клетка - объекты разных типов и нечего морочить ему голову некорректными задачами. Программист на Delphi: пишет во все конференции: "Народ, где взять компонент, который ищет в пустыне льва и помещает его в клетку?" Что можно делать в этой теме? Обсуждать наработки, приёмы, любимые компоненты и библиотеки, делиться своими впечатлениями. Сильно флудить не стоит, ибо можно разгневать администрацию. :) Руководитель сообщества: WinKi-тян Способ вступления: просто отпишитесь в теме и Вы приняты. Желательно указать, какой средой программирования пользуетесь (Turbo Pascal (Borland Pascal), Delphi (+номер версии), Kylix (+аналогично) и т.п.). Участники:0. WinKi-тян1. Un4given2. Маста3. Гримджо4. AngryMouse Edited July 2, 2009 by WinKi-тян (see edit history) Quote
dsp8195 Posted January 11, 2008 Author Report Posted January 11, 2008 (edited) Ну чтож, пока никто не пришёл, дам пару *очень* простых советов, которые пригождаются довольно таки часто (и не только новичкам). Хотите сделать лаунчер\авторанку для игрушки\диска с картинками\музыкой, но не знаете, как заставить программу запускать другие программы\открывать картинки? Нет ничего проще. В составе Delphi есть замечательная библиотека ShellAPI, а в ней в свою очередь функция ShellExecute. Пример использования: Добавьте в uses строку ShellAPI. Далее, в код кнопки\надписи\картинки: ShellExecute(handle, nil, '<относительный путь к файлу>', '<аргументы для запуска (если это программа)>', '<рабочая папка (программы)>', <стиль окна (программы)>); Особенно важен последний пункт. Вот его возможные значения (не все, остальные дублируют нижеуказанные): sw_shownormal - открывает окно программы в таком виде, в котором изначально задумал разработчик.sw_showminimized - открывает окно программы в свёрнутом состоянии.sw_showmaximized - принудительно растягивает окно программы во весь экран (может вызвать непредсказуемые побочные эффекты).sw_shownoactive - открывает окно на заднем плане (неактивное окно)sw_showminnoactive - делает тоже самое, только ещё и в свёрнутом состоянии Допустим, у нас на диске есть 2 папки, в которых располагаются Winamp (autoplay) и наши треки (mp3). Сам исполняемый файл авторанки лежит в корне диска. Тогда, вот что у нас получится: ShellExecute(handle, nil, 'autoplay/winamp.exe', 'mp3/playlist.m3u', 'autoplay', sw_shownormal); Пояснение: в качестве рабочей папки мы указали 'autoplay', иначе Winamp при запуске мог просто не обнаружить собственные плагины и модули. Но, а что если нам необходимо запрограммировать гиперссылку? Никаких проблем: ShellExecute(handle, nil, 'https://www.animeforum.ru', nil, nil, sw_shownormal); Если необходимо, чтобы ссылка характерно подсвечивалась при наведении указателя на TLabel или TButton: Добавляем в свойство OnMouseEnter примерно следующий код: Label_Hyperlink.Font.Color := clHighlight; // Также можно использовать и HTML-цвета, просто заменить префикс # на $ и поменять местами первые два и последние два символа (в Дельфи цвет записывается не как #RRGGBB, а $BBGGRR) А затем в свойство OnMouseLeave: Label_Hyperlink.Font.Color := clDefault; Edited January 11, 2008 by WinKi-тян (see edit history) Quote
Un4given Posted January 11, 2008 Report Posted January 11, 2008 хех ) вообщем работаю с Паскалем и C++ билдер довольно плотнопопутно изучаю Clips и Ассемблер =) Quote
dsp8195 Posted January 11, 2008 Author Report Posted January 11, 2008 Un4given, добро пожаловать. ^_^ Quote
dsp8195 Posted March 29, 2008 Author Report Posted March 29, 2008 (edited) Эх... давненько что-то тема простаивает... Вот ещё несколько крохотных советов по дизайну. 0. Если Вы хотите придать каждой форме собственный значок, но при этом желаете, чтобы всё было сделано "по правилам", то есть через Windows-ресурсы, необходимо выполнить следующее: а. Создать res-файл (это можно сделать через программы Restorator, ResHacker или через встроенный редактор ресурсов Delphi) и залинковать его в тело приложения директивой {$R Имя_файла.res} (обычно это делается в модуле главной формы). b. Для того, чтобы вызвать этот значок, вставьте в процедуру OnCreate следующий код: try Имя_Формы.Icon.Handle := LoadIcon(MainInstance,'Имя_ресурса_значка'); except // Молчим насчёт отсутствующего значка end; А на вопрос "зачем так извращаться", есть простой ответ - оптимизация. Windows-ресурсы весят меньше, чем те же данные, встроенные в форму Delphi. +упрощает перерисовку графических элементов программы - достаточно лишь отредактировать ресурс, а затем запустить Delphi для компиляции. ;) 1. Мною были испробованы несколько компонентов, заменяющих SpeedButton, но обнаружилась одна маленькая проблема - в моём случае вся графика загружается из Windows-ресурсов в формате PNG. Это сделало невозможным использование полупрозрачности (TPNGSpeedButton работает с ошибками -- если на кнопке ЕСТЬ подпись, то глиф при загрузке из Windows-ресурса рендерится ПОВЕРХ неё :(, что в моём случае было просто неприемлимо). Но, оказалось что нет ничего невозможного, и мя удалось придумать вполне неплохо работающий способ загрузки и рендеринга полупрозрачного глифа на обычный SpeedButton! :lol: Собственно, код (Лицензия - GPL v3): Примечание: в качестве первого входного параметра подставляем КОМПОНЕНТ, а точнее нечто вида TSpeedButton.Glyph или TImage.Bitmap. В качестве второго -- любой TGraphic, будь то BMP, JPG, PNG, GIF или другой вид ресурсов, совместимый с TGraphic. Далее ширину и высоту в пикселях. Ну, и последнее - цвет для рендеринга, как в виде константы Delphi, так и в виде цвета $AAGGBBRR. { Draws translucent graphics (hack for TSpeedButton & other native Delphi 7 components). ^___^ } procedure Skin_DrawButtonIcon(Glyph : TBitmap; Source : TGraphic; GlyphWidth : integer = 48; GlyphHeight : integer = 48; DrawColor : TColor = clBtnFace); begin Glyph.Create; // Инициализируем контейнер картинки Glyph.Width := GlyphWidth; // Присваиваем ширину... Glyph.Height := GlyphHeight; // ...и высоту { Fixing color "bug" } Glyph.Canvas.Pen.Color := DrawColor; // Назначаем фоновый цвет для рендеринга if GlyphWidth > GlyphHeight then Glyph.Canvas.Pen.Width := GlyphWidth else Glyph.Canvas.Pen.Width := GlyphHeight; // Присваиваем инструменту "ручка" толщину линии по ширине или высоте картинки Glyph.Canvas.Rectangle(0,0,GlyphWidth,GlyphHeight); // рендерим фон Glyph.Canvas.Draw(0,0,Source); // накладываем картинку end; А вот и пример использования (укороченный): procedure LoadSkin; var Icon_Archive_Open : TPNGObject; begin // Создаём контейнер Icon_Archive_Open := TPNGObject.Create; // Загружаем ресурс в контейнер Icon_Archive_Open.LoadFromResourceName(HInstance,'Icon_Archive_Open'); // Вызываем вышеописанную процедуру Skin_DrawButtonIcon(SB_OpenArchive.Glyph,Icon_Archive_Open); // Высвобождаем память от контейнера FreeAndNil(Icon_Archive_Open); end; Теперь несколько слов о том, почему строка Icon_Archive_Open.LoadFromResourceName(HInstance,'Icon_Archive_Open'); не вызвала ошибки. Дело в том, что перед её использованием необходимо внести небольшое исправление в библиотеку pngimage.pas (пакет TPNGImage 1.4): Найдите этот участок кода... try ResStream := TResourceStream.Create(Instance, Name, RT_RCDATA); except RaiseError(EPNGCouldNotLoadResource, EPNGCouldNotLoadResourceText); exit; end; ...замените его на... // WinKi: this version will try to load from PNG resdata type first try ResStream := TResourceStream.Create(Instance, Name, 'PNG'); except try ResStream := TResourceStream.Create(Instance, Name, RT_RCDATA); except RaiseError(EPNGCouldNotLoadResource, EPNGCouldNotLoadResourceText); exit; end; end; На этом всё, до новых встреч. ^___~ Edited March 29, 2008 by WinKi-тян (see edit history) Quote
Маста Posted November 17, 2008 Report Posted November 17, 2008 WinKi-тян, Респект, отличный обзорчик даже захотелось вступить в тим.Если конечно вы немного расширите существующие рамки, я в последнее время отошел от Pascal, но не далеко.. Quote
dsp8195 Posted November 17, 2008 Author Report Posted November 17, 2008 Маста, mochiron! :rolleyes: Одно "но": напиши пожалуйста, какой средой программирования пользуешься. :) Quote
Маста Posted December 1, 2008 Report Posted December 1, 2008 (edited) Arigatou WinKi-тян 1С язык встроенной конфигурации одноимённой программы, среда тоже одноимённая ^_^А ещё С++, и скрипты PHP, SQL, JavaScript, CSS, XML, HTML/DHTML.. Тут любимой среды нет, но есть небольшая колекция компиляторов, отладчиков.. :wub:Пробовал немного Delphi, но с Unix она не дружит.. Edited December 1, 2008 by Маста (see edit history) Quote
Angrymouse Posted July 1, 2009 Report Posted July 1, 2009 Всем привет, хочу вступить =)Немного (совсем немного) кодю на паскале (Turbo 7 и PascalABC) и делфи (Borland Delphi 7) Quote
dsp8195 Posted July 2, 2009 Author Report Posted July 2, 2009 AngryMouse, добро пожаловать. :rolleyes: Quote
niiro dzyaki Posted July 3, 2009 Report Posted July 3, 2009 Пробовал немного Delphi, но с Unix она не дружит..Lazarus же. В последнее время, кстати, ввиду того, что программирую исключительно для себя, а пользуюсь исключительно линуксом, пользуюсь только им. Ну, за исключением мелочей на С и скриптов на bash/perl. Quote
Mаru Posted November 13, 2009 Report Posted November 13, 2009 (edited) nevermind Edited November 17, 2009 by Maru-sempai (see edit history) Quote
Leoparrd Posted December 30, 2009 Report Posted December 30, 2009 Меня всегда поражала подобная некомпетентность. Delphi не язык программирования, и никогда им не был. Есть Паскаль. Это язык. А всё остальное - это это просто вариации сред разработки. Delphi - это визуальная среда разработки. Её свободный клон - Лазарус. являеещейся визуальной средой FreePascal. Тurbo Pascal - это древняя среда разработки....Но Паскаль всегда остаётся Паскалем... Ну и конечно-же каждая фирма выпускающая эти продукты вводит свои фишки и расширения.... Ну а Кайликс - это среда для Линукс. Надо же и там программы на Паскале писать...А куда же отнести библиотеку KOL? Она работает и под Delphi И в других средах... В общем да... У меня есть Delphi 7-ая... Работаю в основном c KOL. VCL использую очень редко...И зачем гнатся за другими версиями? Ничего хорошего в них нет, кроме одной фишки в 2009-ой...Пока не будет поддержки 64-бит, и смотреть на новые версии не стоит...В принипе для КOL и тройки за глаза и за уши... PS Да. Delphi это не язык, а среда разработки. Кто хочет, возится с компанентами. Кто хочет, пишет просто код... И включает Delphi три языка. Паскаль Си++ и Джаву. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.