Добро пожаловать, гость ( Вход | Регистрация )
| -=CHE@TER=- |
Jan 5 2007, 00:35
Сообщение
#1
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,402 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 325 раз(а) |
Delphi programs in API.
На английском. Очень подробно всё описано, плюс есть исходные коды готовых юнитов. Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял). |
![]() ![]() |
| -=CHE@TER=- |
May 1 2013, 11:54
Сообщение
#2
|
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,402 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 325 раз(а) |
Ну, ладно, пока никто с получением текста не помог - поделюсь другими своими интересными наработками...
1) Многие программы в Windows не работают с относительными путями. К примеру, как я уже говорил выше, чтобы функции [Get|Write]PrivateProfile*() работали как надо, а не сохраняли в %SystemRoot%, нужно либо указывать абсолютный путь, либо писать в начале ".\" перед именем файла. Однако, есть куда более серьёзные проблемы - например, при попытке открыть через OLE-объект документ Word или Excel, нужно обязательно указывать абсолютный путь до файла иначе труба. Кстати говоря, относительный путь может сыграть злую шутку - если, к примеру, имя файла для записи результата было указано как ".\filename.ext", то, когда программа сменит рабочий каталог через SetCurrentDirectory(), файл будет сохраняться не в то место где он был до этого, а в новый каталог, который только что стал текущим! И тут на выручку приходит WinAPI функция GetFullPathName(), документацию на которую рекомендую посмотреть на MSDN, а я только ограничусь примером, который из относительного пути делает абсолютный: CODE Function ExpandFullPath(FileName: String): String; Var P: PChar; Begin // get filename size (include null character) SetLength(result, GetFullPathName(PChar(FileName), 0, Nil, P)); // get full filename path GetFullPathName(PChar(FileName), Length(result), PChar(result), P); End; Сунуть в функцию можно что угодно (предоложим, что мы сейчас в C:\Folder): filename.ext => C:\Folder\filename.ext ..\..\filename.ext => C:\filename.ext C:\Folder\..\.\Folder\filename.ext => C:\Folder\filename.ext И так далее. Хочу заметить, что файл filename.ext, как и путь до него, не обязан существовать - функция работает только со входной строкой приделывая к ней текущий каталог. Чертовски удобно. 2) Не так часто меню обои на рабочем столе, последний раз делал это пару лет назад - сложно найти хорошие фото. Проблема тут в том, что часто фотографии леса, водопадов и гор красивые, но слишком яркие - белый текст ярлыков на них не видно, а тень Windows XP как-то криво отбрасывает, в результате чего текст становится абсолютно нечитаемым и приходится напрягать глаза. Включать непрозрачный фон для надписей не хочу, так как смотрится это весьма коряво. Пробовал было в PhotoShop 7 делать эфект фонарика, чтобы по краям фото яркость уменьшалась, но PS7 одновременно поднимает яркость в середине, из-за чего изображение в центре "выцветает". Попытка откалибрировать ни к чему хорошему не привела и тогда я написал свою утилиту (за 5 минут, так что она не особо оптимальна) для затемнения фото от центра к краям, где, обычно, иконки и распологаются. При этом центр не осветляется, а остаётся как прежде. Вот код - может ещё кому-нибудь пригодится. Можно сделать белый .BMP файл размером с экран и запустить: darkener white.bmp fade.bmp 0 Чтобы посмотреть как происходит затенение. Величина затенения (FadeValue) будет таковой только в самых удалённых от центра точках - т.е. в углах. CODE Program darkener; {$APPTYPE CONSOLE} Uses Windows, Graphics; Var I, J, X, Y: Integer; D, FadeVal: Longword; K, KK: Real; TB: TBitmap; Begin WriteLn('Image Darkener'); WriteLn('(c) CTPAX-X Team 2013'); WriteLn('http://www.CTPAX-X.org/'); WriteLn; If ParamCount <> 3 Then Begin WriteLn('Usage: darkener.exe input.bmp output.bmp FadeValue[0..255]'); Exit; End; J:=0; Val(ParamStr(3), I, J); If ((I < 0) Or (I > 255) Or (J <> 0)) Then Begin WriteLn('Invalid FadeValue[0..255]!'); Exit; End; Write('Working...'); FadeVal:=I; TB:=TBitmap.Create; TB.LoadFromFile(ParamStr(1)); X:=TB.Width Div 2; Y:=TB.Height Div 2; K:=(255 - FadeVal) / sqrt((X*X) + (Y*Y)); For J:=0 To TB.Height - 1 Do For I:=0 To TB.Width - 1 Do Begin D:=TB.Canvas.Pixels[I, J]; KK:=K * sqrt(((I - X)*(I - X)) + ((J - Y)*(J - Y))); KK:=255 - KK; D:=RGB( Trunc((GetRValue(D)/255)*KK), Trunc((GetGValue(D)/255)*KK), Trunc((GetBValue(D)/255)*KK) ); TB.Canvas.Pixels[I, J]:=D; End; TB.SaveToFile(ParamStr(2)); TB.Free; Write('done!'); WriteLn; End. 3) И, наконец, последнее чем хочу поделиться - файл для программ не работающих с маской из командной строки: do.bat CODE @echo off for %%a in (%2) do %1 "%%a" %3 %4 %5 %6 %7 %8 %9 Помещаем этот файл куда-нибудь в %PATH% (например в C:\Windows) и запускаем, к примеру, так: do pngout.exe *.bmp /c0 |
-=CHE@TER=- Delphi, Asm, C, WinAPI, PHP, ... Jan 5 2007, 00:35
Siberian GRemlin Может не в тему, но не решился создавать новую тем... Jul 5 2007, 16:36
-=CHE@TER=- Может не в тему, но не решился создавать новую тем... Jul 5 2007, 16:44
-=CHE@TER=- Вопрос - кто знает, как по MUTEX'у процесса по... Jul 7 2007, 16:37
jTommy Вопрос - кто знает, как по MUTEX'у процесса по... Jul 8 2007, 16:01
-=CHE@TER=- Если я правильно понял ситуация такая: загружена т... Jul 9 2007, 12:10
jTommy Нет, всё гораздо хуже - программа при загрузке ком... Jul 9 2007, 20:09
-=CHE@TER=- Нет, всё гораздо хуже - программа при загрузке ком... Aug 22 2014, 11:14
Xplorer Handle'у процесса посылал WM_CLOSE - без толку... Jul 10 2007, 09:44
-=CHE@TER=- Бардак на корабле! © Попугай из Пиратов Карибс... Jul 10 2007, 12:51
Xplorer Я изменил код.
А вот, кстати, интересный тогда вп... Jul 10 2007, 13:54
-=CHE@TER=- Я изменил код.
Смотри в коде.Хе-хе, ты своё сообщ... Jul 10 2007, 22:04
-=CHE@TER=- Думаю, тут будет полезно приводить некоторые полез... Jul 16 2007, 16:40
Siberian GRemlin Извиняюсь, если не в тему (вроде это WinAPI). Хоте... Jul 19 2007, 09:14
-=CHE@TER=- Извиняюсь, если не в тему (вроде это WinAP). Хотел... Jul 19 2007, 13:51
-=CHE@TER=- А теперь моя очередь задавать вопрос. (*улыбается*... Jul 20 2007, 01:30
Xplorer Для 2000/XP/2003/Vista - RasGetConnectionStatistic... Jul 20 2007, 06:08
-=CHE@TER=- Xplorer!
RasGetConnectionStatistics - это как ... Jul 20 2007, 13:48
-=CHE@TER=- [b]Xplorer!
RasGetConnectionStatistics - это к... Jul 21 2010, 16:00
-=CHE@TER=- Переименовал тему - теперь тут можете обсуждать чт... Jul 23 2007, 19:01
-=CHE@TER=- Кстати, насчёт ReadKey / KeyPressed - вот, неплоха... Aug 11 2007, 13:54
-=CHE@TER=- Вопрос ко всем - возможно ли при помощи класса TFi... Apr 7 2008, 17:03
Xplorer S := TFileStream.Create('x.x', fmO... Apr 8 2008, 19:30
-=CHE@TER=- Xplorer!
Ой, спасибо большое!
Что-то я сто... Apr 9 2008, 10:09
-=CHE@TER=- Ещё пара глупых вопросов:
1. В Си можно сделать т... Jun 8 2008, 11:49
Grom PE -=CHE@TER=-, вопросы нормальные =)
1. Если я прав... Jun 8 2008, 12:28
-=CHE@TER=- Grom PE!
Спасибо большое, только создавать ещё... Jun 8 2008, 17:59
-=CHE@TER=- Небольшая программка для перезапуска зависших прил... Oct 12 2008, 19:56
-=CHE@TER=- Вопрос: кто-нибудь знает как получить ключи команд... Oct 13 2008, 08:16
-=CHE@TER=- Вот код тру перезапускалки:
Program WHungApp;
Us... Oct 13 2008, 10:55
-=CHE@TER=- PHP 5.2.1 + IIS 6
PHP has encountered an Access V... Oct 18 2008, 11:15
-=CHE@TER=- Очередная херня - столько времени убил, пока нагуг... Oct 31 2008, 15:54
-=CHE@TER=- Есть на форме UpDown1, ассоциированный (Associate)... Nov 15 2008, 07:32
Grom PE -=CHE@TER=-,
у меня с чистым созданным проектом вс... Nov 15 2008, 12:58
-=CHE@TER=- Еще попробуй перезапустить Delphi.Как оно всё оказ... Nov 15 2008, 13:08
-=CHE@TER=- Вопрос сложный, но может кто-то знает в чём прикол... Dec 18 2008, 18:26
-=CHE@TER=- Делал тут как-то плеер. И решил сделать для него в... Jan 2 2009, 19:53
-=CHE@TER=- Кто-нибудь знает, как можно проверить сокет на дох... Jun 25 2009, 04:10
-=CHE@TER=- Однако! Первая строчка с получением 0 байт у м... Dec 5 2009, 16:36
Siberian GRemlin Обычно указывается драйвер вызвавший эту ошибку. Е... Jun 25 2009, 06:22
-=CHE@TER=- Обычно указывается драйвер вызвавший эту ошибку. Е... Jun 25 2009, 11:56
Siberian GRemlin Полезную статейку нашёл. Даже если ошибка на чужом... Nov 2 2009, 10:11
-=CHE@TER=- Товарищи, объясните мне кто-нибудь такой феномен:
... Jan 15 2010, 19:26
Grom PE -=CHE@TER=-
Ну дык, процессор так работает, x shr... Jan 16 2010, 07:46
-=CHE@TER=- Думаю, что это лучше здесь разместить, чем в ссылк... Jan 23 2010, 18:35
Siberian GRemlin Может не в тему, но есть ли готовый модуль\би... Feb 15 2010, 15:45
Axsis пара ссылок с первой страницы гугла:
http://www.de... Feb 15 2010, 16:10
-=CHE@TER=- Чтобы долго не писать чего да как - приведу [/cut]... Apr 22 2010, 10:05
-=CHE@TER=- Иногда бывает надо при распаковке игровых архивов ... Jun 1 2010, 17:46
-=CHE@TER=- Блин, ставил по работе на удалённый сайт Joomla - ... Jul 27 2010, 17:38
-=CHE@TER=- Вчерась ковырял одну игрушку, где данные были упак... Aug 10 2010, 14:27
-=CHE@TER=- Вчерась ковырял одну игрушку, где данные были упак... Mar 7 2012, 20:37
Siberian GRemlin Сегодня у меня был очередной сеанс мозгофилии.
При... Jan 7 2011, 15:20
-=CHE@TER=- 1) Либо Inno: AnsiString -> WideString; Delphi:... Jan 7 2011, 23:20
Siberian GRemlin Собственно, я и спрашивал как правильно перегнать ... Jan 8 2011, 10:49
-=CHE@TER=- Locale - это, грубо так говоря, язык установленный... Jan 8 2011, 12:35
-=CHE@TER=- Ковырял тут по просьбе CMS одну. Собственно, были ... Jan 9 2011, 16:01
Siberian GRemlin Не подскажите ка можно на JavaScript вставить (гип... Apr 14 2011, 16:49
-=CHE@TER=- Если тебе просто что-то надо вставить, а не файл, ... Apr 14 2011, 18:26
Siberian GRemlin Мне нужно было именно на JS или jQ, ибо для AJAX н... Apr 15 2011, 11:12
-=CHE@TER=- Поставил я тут новый colorer для FAR и моя тачка з... Jul 23 2011, 13:01
Siberian GRemlin Намедни столкнулся с тем что IE не понимает InnerH... Jul 28 2011, 03:05
-=CHE@TER=- У Delphi такой смешной оптимизатор (компилирую про... Nov 11 2011, 15:15
-=CHE@TER=- Siberian GRemlin!
До меня, кажется, дошло, по... Nov 14 2011, 13:41
-=CHE@TER=- У Delphi такой смешной оптимизатор (компилирую про... Mar 12 2012, 09:13
Siberian GRemlin для каждой строки писать String[кол-во_символов] =... Mar 12 2012, 11:07
Siberian GRemlin Как я понимаю при конкатенации (дурацкое слово) ст... Nov 11 2011, 15:25
-=CHE@TER=- Похоже долго ты на Java писал. (*улыбается*)
Нет,... Nov 11 2011, 20:39
-=CHE@TER=- Писал я недавно патч для включения крови в German ... Jan 14 2012, 13:26
Siberian GRemlin Кто-нибудь знает где можно взять готовый код под P... Mar 24 2012, 09:13
-=CHE@TER=- Вот тут (за номером 7 самый простой, и ниже - до к... Mar 24 2012, 11:58
-=CHE@TER=- В Си есть такая замечательная функция, как sprintf... Apr 14 2012, 15:39
-=CHE@TER=- И ещё о нескольких устаревших (по мнению MSDN, где... Apr 15 2012, 10:32
-=CHE@TER=- Проводя очередную чистку системы, натолкнулся на ф... Apr 19 2012, 13:23
Grom PE Сам у себя встречал такие файлы. Полюбопытствовал,... Apr 19 2012, 19:05
-=CHE@TER=- В очередной раз зайдя на сайт товарища Siberian GR... Apr 24 2012, 12:14
Siberian GRemlin Я так понимаю, ты знаешь способ создания динамичны... Apr 24 2012, 13:16
-=CHE@TER=- Я так понимаю, ты знаешь способ создания динамичны... Apr 24 2012, 15:37
Siberian GRemlin Месяц назад я только договорился с админом и мне в... Apr 24 2012, 15:49
-=CHE@TER=- О, блин, 4-ый PHP это уже здорово, чем вообще ниче... Apr 24 2012, 16:19
-=CHE@TER=- Нашёл в Delphi 7 охрененный косяк, который вынес м... May 30 2012, 10:22
-=CHE@TER=- Все, наверное, помнят, что в .BMP формате строки и... Sep 6 2012, 20:32
jTommy Ради интереса полез в свою "библию" - кн... Sep 8 2012, 20:52
-=CHE@TER=- Ты имеешь ввиду GFF?
Я нашёл там вот такое описани... Sep 9 2012, 12:43
jTommy Да, она самая, издание от 1997 года. Sep 9 2012, 21:25
-=CHE@TER=- Поделюсь двумя вещами.
1) Во-первых, в Delphi 7 к... Dec 15 2012, 09:29
-=CHE@TER=- Товарищи, у меня вопрос - может кто-нибудь помочь?... Apr 6 2013, 18:25
-=CHE@TER=- Нашёл вот такую штуку:
Это из исходных кодов ста... Apr 9 2013, 16:17
-=CHE@TER=- Исходные коды можно нагуглить, могу выложить, если... Apr 18 2013, 16:48
-=CHE@TER=- Я, походу, перестану скоро Delphi пользоваться, во... Apr 27 2013, 15:06
Siberian GRemlin Моя прога по работе использует TTimer и пока пробл... Apr 29 2013, 13:48
-=CHE@TER=- P. S. С получением текста помочь не могу, к сожале... Apr 30 2013, 11:40
-=CHE@TER=- Сделал себе замечательный srvrun.bat для перезапус... Jun 6 2013, 17:11
Siberian GRemlin Возникла внезапная потребность использовать socks ... Jun 22 2013, 08:06
-=CHE@TER=- Мне не так давно было ещё одно откровение, которым... Jun 28 2013, 11:09
-=CHE@TER=- Часто пишу программы, которые со временем довольно... Sep 14 2013, 14:32
-=CHE@TER=- Пишу в последнее время на Си, так что недавно мне ... Nov 23 2013, 17:38
-=CHE@TER=- Недавно я тут писал про утилиту COMPRESS.EXE, сжим... Nov 27 2013, 15:42
-=CHE@TER=- Натолкнулся на то, что в нескольких играх использу... Feb 13 2014, 14:49![]() ![]() |
| Упрощённая версия | Сейчас: 7th December 2025 - 23:22 |