Перейти к содержимому

Фотография

[Delphi] team


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 09 Январь 2008 - 07:12

Название: [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-тян: 02 Июль 2009 - 19:47

  • 0

#2 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 11 Январь 2008 - 08:02

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

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

  • 0

#3 Un4given

Un4given
  • Активные участники
  • PipPip
  • Интересующийся

  • Cообщений: 123
1
Обычный

Отправлено 11 Январь 2008 - 08:13

хех )
вообщем работаю с Паскалем и C++ билдер довольно плотно
попутно изучаю Clips и Ассемблер =)
  • 0

#4 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 11 Январь 2008 - 11:19

Un4given, добро пожаловать. ^_^
  • 0

#5 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 29 Март 2008 - 07:58

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

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-тян: 29 Март 2008 - 08:41

  • 0

#6 Маста

Маста
  • Старожилы
  • PipPip
  • ~Блудный Нека~

  • Cообщений: 175
4
Обычный

Отправлено 17 Ноябрь 2008 - 13:43

WinKi-тян, Респект, отличный обзорчик даже захотелось вступить в тим.
Если конечно вы немного расширите существующие рамки, я в последнее время
отошел от Pascal, но не далеко..
  • 0

#7 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 17 Ноябрь 2008 - 14:46

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

#8 Маста

Маста
  • Старожилы
  • PipPip
  • ~Блудный Нека~

  • Cообщений: 175
4
Обычный

Отправлено 01 Декабрь 2008 - 18:42

Arigatou WinKi-тян
1С язык встроенной конфигурации одноимённой программы, среда тоже одноимённая ^_^
А ещё С++, и скрипты PHP, SQL, JavaScript, CSS, XML, HTML/DHTML..
Тут любимой среды нет, но есть небольшая колекция компиляторов, отладчиков.. :wub:
Пробовал немного Delphi, но с Unix она не дружит..

Сообщение отредактировал Маста: 01 Декабрь 2008 - 19:52

  • 0

#9 Гримджо

Гримджо
  • Старожилы
  • PipPip
  • о_О

  • Cообщений: 287
0
Обычный

Отправлено 30 Июнь 2009 - 04:30

Знаю паскаль, изучаю делфи)
  • 0

#10 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 30 Июнь 2009 - 17:38

Гримджо, weRcome! :mad:
  • 0

#11 Angrymouse

Angrymouse
  • Старожилы
  • PipPipPipPip
  • Я бегу, бегу, бегу, бегу, на бегу едут, едут колёса...

  • Cообщений: 944
1
Обычный

Отправлено 01 Июль 2009 - 13:13

Всем привет, хочу вступить =)
Немного (совсем немного) кодю на паскале (Turbo 7 и PascalABC) и делфи (Borland Delphi 7)
  • 0

#12 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 02 Июль 2009 - 19:48

AngryMouse, добро пожаловать. :rolleyes:
  • 0

#13 niiro dzyaki

niiro dzyaki
  • Старожилы
  • PipPipPipPipPipPipPip
  • провокатор

  • Cообщений: 16 299
350
Маленький пони

Отправлено 03 Июль 2009 - 07:24

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

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

#14 Mаru

Mаru
  • Старожилы
  • PipPipPipPipPipPipPip
  • Cообщений: 8 929
-44
Дюдюка Барбидокская

Отправлено 13 Ноябрь 2009 - 18:57

nevermind

Сообщение отредактировал Maru-sempai: 17 Ноябрь 2009 - 23:24

  • 0

#15 Leoparrd

Leoparrd
  • Участники
  • Pip
  • Новичок

  • Cообщений: 4
0
Обычный

Отправлено 30 Декабрь 2009 - 19:56

Меня всегда поражала подобная некомпетентность. Delphi не язык программирования, и никогда им не был. Есть Паскаль. Это язык. А всё остальное - это это просто вариации сред разработки. Delphi  - это визуальная среда разработки. Её  свободный клон - Лазарус. являеещейся визуальной средой FreePascal. Тurbo Pascal - это древняя среда разработки....
Но Паскаль всегда остаётся Паскалем... Ну и конечно-же каждая фирма выпускающая эти продукты вводит свои фишки и расширения....
Ну а Кайликс - это среда для Линукс. Надо же и там программы на Паскале писать...
А куда же отнести библиотеку KOL? Она работает и под Delphi И в других средах...

В общем да... У меня есть Delphi 7-ая... Работаю в основном c KOL. VCL использую очень редко...
И зачем гнатся за другими версиями? Ничего хорошего в них нет, кроме одной фишки в 2009-ой...
Пока не будет поддержки 64-бит, и смотреть на новые версии не стоит...
В принипе для КOL и тройки за глаза и за уши...

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




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных