Перейти к содержимому
Открыть в приложении

Лучший способ просмотра. Узнать больше.

АнимеФорум

Полноэкранное приложение на домашнем экране с push-уведомлениями, значками и другими функциями.

Чтобы установить это приложение на iOS и iPados
  1. Нажмите на иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите Добавить на домашний экран.
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите на меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на домашний экран или Установить приложение.
  3. Подтвердите, нажав Установить.

[Delphi] team

Название: [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. Un4given

2. Маста

3. Гримджо

4. AngryMouse

Отредактировано от WinKi-тян (см. историю изменений)

Стар и потрёпан временем. Ворчит и кусается.

Рекомендуемые ответы

  • Автор

Ну чтож, пока никто не пришёл, дам пару *очень* простых советов, которые пригождаются довольно таки часто (и не только новичкам).

 

Хотите сделать лаунчер\авторанку для игрушки\диска с картинками\музыкой, но не знаете, как заставить программу запускать другие программы\открывать картинки? Нет ничего проще. В составе 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;

Отредактировано от WinKi-тян (см. историю изменений)

Стар и потрёпан временем. Ворчит и кусается.

хех )

вообщем работаю с Паскалем и C++ билдер довольно плотно

попутно изучаю Clips и Ассемблер =)

  • 2 месяцев позже...
  • Автор

Эх... давненько что-то тема простаивает... Вот ещё несколько крохотных советов по дизайну.

 

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;

 

На этом всё, до новых встреч. ^___~

Отредактировано от WinKi-тян (см. историю изменений)

Стар и потрёпан временем. Ворчит и кусается.
  • 7 месяцев позже...

WinKi-тян, Респект, отличный обзорчик даже захотелось вступить в тим.

Если конечно вы немного расширите существующие рамки, я в последнее время

отошел от Pascal, но не далеко..

Я очень кавайный...а тот кто в это не верит, пусть посмотрит на аватар...

 

[Neko] [Дядьки]team

  • Автор
Маста, mochiron! :rolleyes: Одно "но": напиши пожалуйста, какой средой программирования пользуешься. :)
Стар и потрёпан временем. Ворчит и кусается.
  • 2 недель позже...

Arigatou WinKi-тян

1С язык встроенной конфигурации одноимённой программы, среда тоже одноимённая ^_^

А ещё С++, и скрипты PHP, SQL, JavaScript, CSS, XML, HTML/DHTML..

Тут любимой среды нет, но есть небольшая колекция компиляторов, отладчиков.. :wub:

Пробовал немного Delphi, но с Unix она не дружит..

Отредактировано от Маста (см. историю изменений)

Я очень кавайный...а тот кто в это не верит, пусть посмотрит на аватар...

 

[Neko] [Дядьки]team

  • 6 месяцев позже...

Всем привет, хочу вступить =)

Немного (совсем немного) кодю на паскале (Turbo 7 и PascalABC) и делфи (Borland Delphi 7)

В мире есть 2 бесконечные вещи: космос и человеческая глупость. Но на счет первой я не уверен.

(А. Энштейн)

 

[За чистоту русского языка Team]

[Animefans for Best World]

Пробовал немного Delphi, но с Unix она не дружит..

Lazarus же. В последнее время, кстати, ввиду того, что программирую исключительно для себя, а пользуюсь исключительно линуксом, пользуюсь только им. Ну, за исключением мелочей на С и скриптов на bash/perl.

[ Last Exile ] [ Моран жив! ] [ Fallout ] [ Админы ] [ Дядьки ] Teams [奇跡を信じて団 ]
  • 4 месяцев позже...
  • 1 месяц позже...

Меня всегда поражала подобная некомпетентность. Delphi не язык программирования, и никогда им не был. Есть Паскаль. Это язык. А всё остальное - это это просто вариации сред разработки. Delphi  - это визуальная среда разработки. Её  свободный клон - Лазарус. являеещейся визуальной средой FreePascal. Тurbo Pascal - это древняя среда разработки....

Но Паскаль всегда остаётся Паскалем... Ну и конечно-же каждая фирма выпускающая эти продукты вводит свои фишки и расширения....

Ну а Кайликс - это среда для Линукс. Надо же и там программы на Паскале писать...

А куда же отнести библиотеку KOL? Она работает и под Delphi И в других средах...

 

В общем да... У меня есть Delphi 7-ая... Работаю в основном c KOL. VCL использую очень редко...

И зачем гнатся за другими версиями? Ничего хорошего в них нет, кроме одной фишки в 2009-ой...

Пока не будет поддержки 64-бит, и смотреть на новые версии не стоит...

В принипе для КOL и тройки за глаза и за уши...

 

PS Да. Delphi это не язык, а среда разработки. Кто хочет, возится с компанентами. Кто хочет, пишет просто код... И включает Delphi три языка. Паскаль Си++ и Джаву.

Присоединяйтесь к обсуждению

Вы можете опубликовать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, войдите сейчас, чтобы публиковать с вашего аккаунта.
Примечание: Ваш пост требует одобрения модератора перед публикацией.

Гость
Ответить на эту тему...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу.

Важная информация

Аккаунт

Навигация

Поиск

Настроить push-уведомления в браузере

Chrome (Android)
  1. Нажмите на значок замка рядом с адресной строкой.
  2. Выберите Разрешения → Уведомления.
  3. Настройте предпочтения.
Chrome (Desktop)
  1. Нажмите на значок замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите пункт Уведомления и настройте параметры по своему усмотрению.