Форум: "Потрепаться";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизНовый модуль , сборник полезных процедур от ACS inc. Найти похожие ветки
← →
Black_phoenix © (2005-01-04 12:26) [0]Так как кладовка какого то не работает выкладываю модуль на narod :( http://club-soft.narod.ru/acs_utils_1.0.rar
Описание сдеся :
acs_utils Представляет из себя сборник полезных функций
// ******************************* Описание функций
// ----------- Функции для перевода программы на другой язык
procedure SaveLangText(FileName : String); // Сохранение в указанном файле Caption и Text всех видимых контролов
procedure LoadLangText(FileName : String); // Загрузка из указанного файла всех надписей контролов
Внимание ! Обрабатываются эти контролы :
tOpenDialog
tsavedialog
tOpenPictureDialog
tsavePictureDialog
tPageControl
tTabControl
tRichEdit
tStatusBar1
tListView
tTreeView
TBitBtn
tSpeedButton
tCheckListBox
tStaticText
tmemo
tCombobox
tlisbox
tPanel
tLabel
tButton
tChckbox
tGroupbox
tRadionbutton
tMenu
tRadioGroup
Внимание ! При сохранении в ini файл если есть запись на обрабатываемый контрол то данные не записываются , если данных в ini файле нет то тогда функция запишет Caption или Text контрола
// --------- Работа с приложением
procedure SaveApplicationIni(SelForm : TForm); // Записать текущее положение программы на экране в ini файл
procedure LoadApplicationIni (SelForm : TForm); // Загрузить сохраненное положение приложения на экране
// -------- Работа с ini файлом ( ini файл создается в каталоге программы )
procedure SaveParamIntToIni( IntParam : Integer; Section : String); // Записать integer данные в ini файл
procedure SaveParamBoolToIni( BoolParam : Boolean; Section : String); // Записать boolean данные в ini файл
procedure SaveParamStrToIni( StrParam : String; Section : String); // Записать string данные в ini файл
procedure LoadParamStrToIni(var StrParam : String; Section : String); // Прочитать integer данные из ini файла
procedure LoadParamBoolToIni(var BoolParam : Boolean; Section : String); // Прочитать boolean данные из ini файла
procedure LoadParamIntToIni(var IntParam : Integer; Section : String); // Прочитать string данные из ini файла
// --------- Дополнительные функции
procedure ShowInTaskBar(ShowForm : Boolean); // Спрятать показать кнопку приложения на панели задач
function FileList (DirName, Filter : String) : TStringList; // Поиск файлов по маске в определенном каталоге
function GetCMDLineFile (CommandLine : String) : String; // Получить командную строку приложения
function GetFileLength (FileName : String) : LongInt; // Получить размер указанного файла в байтах
function GetAmpDir : String; // Получить исходный путь каталога приложения
function AppendSlash(DirName : String) : String; // Функция возвращает путь к указанному каталогу но с установленным слешем в конце
// -------- Регистрация приложений в системе
procedure CreateRegClass (RegClassName, RegKeyDescr : String; IconIndex : Integer); // Регистрация класса и иконки ( с текущим приложением )
procedure RegExtension (RegExtName, RegClassName : String); // Регистрация класса с указаными приложением
version 1.0
Email acs_inc@mail.ru \ Black_phoenix@rambler.ru
www.omega-sector.kz/acs/
forum www.omega-sector.kz/acs/forum/
← →
Чеширский_Кот © (2005-01-04 13:56) [1]кол-во функций просто убивает...
← →
ssk © (2005-01-04 14:03) [2]убивает то, что в архиве DCU :-/
>автору
PAS нельзя было заархивировать? или исходник жутко секретный?
← →
TUser © (2005-01-04 14:06) [3]Также не меньше половины функций убивают тем, что их реализация не занимает больше 1 строчки
← →
Black_phoenix © (2005-01-04 14:14) [4]> ssk © (04.01.05 14:03) [2]
Даю просто так .. так вы же хотите ещё большего ! Вот что значит давать народу полезные наработки
> TUser © (04.01.05 14:06) [3]
Перевод программы ты в одну строчку не напишешь ! а лучше реализации я не встречал
Pas не дам ( по крайней мере сейчас ) так как я затратил и своё время на это.Функции действительно полезные ! особенно перевод.
И требовать от меня что то это просто не уважение
← →
Black_phoenix © (2005-01-04 14:17) [5]Тем более для начинающих этот модуль будет только в помощь.
Напрмер чтобы добавить перевод к любой своей программе нужно всего лишь затратить 3 минуты на подключение модуля и обработки 2х строк
← →
ssk © (2005-01-04 14:24) [6]>Black_phoenix
поверь, ничего супер-революционного в твоих функциях нет
← →
Black_phoenix © (2005-01-04 14:29) [7]> ssk © (04.01.05 14:24) [6]
Я знаю ! :)
Но многим это поможет сократить время разработки программы !
И не нужно мне говорить ничего такого. Я выложил модуль и не требую ничего в замен так что качайте , а кому будет что то нужно ещё обращайтесь поговорим :)
← →
TUser © (2005-01-04 14:36) [8]
> > TUser © (04.01.05 14:06) [3]
>
> Перевод программы ты в одну строчку не напишешь ! а лучше
> реализации я не встречал
Не меньше половины - это еще не все! А в целом согласен с [6] - такой модуль был бы полезен, если бы ты открыл исходники. Его можно было бы добавить в FAQ и посылать туда начинающих. Также подобные наработки могут быть полезны для внутреннего пользования - написал туда что-то, свалил в несколько модулей то, что сам часто используешь - и подключай. Для того, чтобы подобный модуль был полезен не только тебе, там должно быть примерно в 10-20 раз больше функций, тогда и я, глядишь, чего-нибудь для себя там накопаю. А пока, мне например, перевод контролов на нужный язык нафиг не нужен, а вот исходный путь каталога приложения я и без твоего модуля вытащу.
← →
250 (2005-01-04 14:49) [9]>если есть запись на обрабатываемый контрол то данные не записываются
Жаль! А так хотелось бы большего :)
← →
KSergey © (2005-01-04 14:58) [10]Мне совершенно не понятно что есть "перевод". И как это связано с сохранением... Да и подобные вещи я совершенно точно видел, к стати, в дельфи они тоже есть.
Потом, заменить лишь текст для адаптации к другому языку - это смешно, т.к. слишком мало.
Как правило весь интерфейс надо переделывать ввиду различной длины надписей.
А вообще "скрывать" такие ф-ции - просто смешно. Они делаются элементарно, включая этот самый хваленый "перевод"
И еще, к слову.
Исходники интересны хотя бы для того, чтобы оценить можно ли вообще этим делом пользоваться. А то видали тут, хорошо, что авторы были не столь стеснительны - после просмотра исходников пользоваться как-то сразу не хочется... воизбежании..
И еще, по поводу "я же работал"
То, что часто в общем доступе в FAQ - действительно профессиональные, классно сделанные вещи. Ваш же детский лепет - нафиг не нужон.
← →
KSergey © (2005-01-04 15:27) [11]По работе с ini файлом несколько вопросов
1.
> ( ini файл создается в каталоге программы )
Ага, славно. А имя у него какое?
2.
> procedure LoadParamIntToIni(var IntParam : Integer; Section
> : String); // Прочитать string данные из ini файла
Ну ладно, в комментарии подозреваю ошибка.
Но вопрос по существу: если данные не прочитались (не было такого параметра, например) - как я об этом могу узнать и какое значение будет у IntParam после этого?
3. и главый вопрос: чем TIniFile не угодил?
Другие вопросы:
> procedure SaveApplicationIni(SelForm : TForm); // Записать
> текущее положение программы на экране
У программы есть положение на экране???! А если есть, то при чем тут какой-то параметр TForm?
> function GetCMDLineFile (CommandLine : String) : String;
> // Получить командную строку приложения
А использовать CmdLine из System - не прикольно? Или еще проще - сразу ParamCount + ParamStr?
> function GetAmpDir : String; // Получить исходный путь каталога
> приложения
Это в смыслеExtractFileDir (Application.ExeName)
Оно?
> function AppendSlash(DirName : String) : String; // Функция
> возвращает путь к указанному каталогу но с установленным
> слешем в конце
Предлагаю следующую, более универсальную трактовку, аналогичную по функционалу://////////////////////////////////////////////////////////////////////
// Дописывает к строке указанный конечный символ, если строка
// не оканчивается на этот символ; версия с параметром по умолчанию -
// для пути к каталогу
//////////////////////////////////////////////////////////////////////
procedure SetStrEndCh (var AStr: String; const AEndCh: Char = "\");
var
L: Integer;
begin
L := Length(AStr);
if L < 1 then
AStr := AEndCh
else
begin
if AStr[L] <> AEndCh then AStr := AStr + AEndCh;
end;
end;
PS
Прошу воспринять все как конструктивную критику.
К стати, вот до кучи, вдруг тоже сгодится
Дарю ;)
// отрезает указанное кол-во символов от строки слева
function LeftStr (const S: String; const i: Integer): String;
begin
if i <= 0 then
LeftStr := ""
else
LeftStr := Copy(S, 1, i)
end;
// отрезает указанное кол-во символов от строки справа
function RightStr (const S: String; const i: Integer): String;
begin
if i <= 0 then
RightStr := ""
else
RightStr := Copy(S, Length(S)-i+1, i)
end;
// отрезает от строки начиная с указанной позиции - и до конца
function EndingStr (const S: String; const i: Integer): String;
begin
if i <= 0 then
EndingStr := ""
else
EndingStr := Copy(S, i, Length(S)-i+1)
end;
← →
TUser © (2005-01-04 15:36) [12]И еще вдогонку - IncludeTrailingBackslash
← →
KSergey © (2005-01-04 15:39) [13]> [12] TUser © (04.01.05 15:36)
Гы, прикольно... ;) И не знал ;)
← →
GrayFace © (2005-01-04 15:51) [14]А как устанавливать DCU?
Black_phoenix © (04.01.05 14:14) [4]
Функции действительно полезные ! особенно перевод.
Ну, например, function AppendSlash(DirName : String) : String; дублирует стандартную функцию.
← →
Чеширский_Кот © (2005-01-04 15:54) [15]резюме: такой, простите, отстой нужно подальше прятать от общественных глаз, шобы не забросали тухлыми помидорами...
← →
KSergey © (2005-01-04 16:09) [16]> [15] Чеширский_Кот © (04.01.05 15:54)
Нет, я в принципе вполне понимаю радость первооткрывания (для себя) всех этих вещей...
Вот только сам, увы, все больше сталкиваюсь с тем, что все мои "выдумки" давно уже выдуманы и проработаны на хорошем уровне с нюансами, о которых я и не подозревал... :(
Что не умаляет заслуг автора как таковых, конечно, но, увы, на самом деле...
ЗЫ.
Как, например, вычитанная сегодня на этом форуме фраза:
"Оказалось, что многие сервера работают не на Windows, а на Unix [имеются в виду Web-сервера]"
Как забавна сия наивность, как интересно наблюдать за открытиями многогранности мира ;) Я без издевки.
← →
Black_phoenix © (2005-01-04 16:28) [17]Удалено модератором
← →
Black_phoenix © (2005-01-04 16:29) [18]Удалено модератором
← →
Black_phoenix © (2005-01-04 16:29) [19]Блин глючный инет .. :)
← →
Alexander Panov © (2005-01-04 16:41) [20]Black_phoenix © (04.01.05 16:29) [19]
Не слушай их-)
Когда сделаешь что-то полезное, всегда приятно тебе, но не всегда другим.
← →
KSergey © (2005-01-04 17:08) [21]> [18] Black_phoenix © (04.01.05 16:29)
> Более менее полезное сообщение.
Спасибо, конечно, вот только вопросов там было больше одного... Или я зря расшибался?
← →
begin...end © (2005-01-04 17:25) [22]> [11] KSergey © (04.01.05 15:27)
> function LeftStr
> function RightStr
Уже имеются в Delphi 7.
← →
Чеширский_Кот © (2005-01-04 17:27) [23]Панов, зачем изобретать велосипед?
← →
KSergey © (2005-01-04 17:30) [24]> [22] begin...end © (04.01.05 17:25)
> > function LeftStr
> > function RightStr
> Уже имеются в Delphi 7.
Есть такое дело.... Но т.к. D < 7... Перейдем - выкинем, делов то ;)
Вообще, если о строках речь вести - то есть много готовых, замечательных библиотек...;)
← →
Чеширский_Кот © (2005-01-04 17:31) [25]не, давайте вообще весь SysUtils перепишем и никого при этом не будем слушать
← →
begin...end © (2005-01-04 17:32) [26]> [25] Чеширский_Кот © (04.01.05 17:31)
Займитесь на досуге.
← →
Чеширский_Кот © (2005-01-04 17:37) [27]сейчас, разбежался
← →
uny © (2005-01-04 18:07) [28]если первая наработка, то автора понять можно. а так - да хотя бы прога dscaler - с исходниками скачать, посмотреть, подумать))
написать им можно, образумить:D
← →
Anatoly Podgoretsky © (2005-01-04 18:38) [29]После 17-18 у кого то еще есть желание смотреть и теб более запускать?
← →
GuAV © (2005-01-04 19:19) [30]Black_phoenix © (04.01.05 12:26)
> Внимание ! Обрабатываются эти контролы :
Зачем такое ограничение ?
Когда я подобной фигнёй страдал я сделал для всех строковых св-в всех контролов.
> // --------- Работа с приложением
> // -------- Работа с ini файлом ( ini файл создается в
> каталоге программы )
С ини файлами я предпочёл бы работать через TCustomIniFile.
Кстати см. rxLib - там есть компоненты для сохранения свойств в ини визуально (и размеров формы тоже есть)
function FileList (DirName, Filter : String) : TStringList; // Поиск файлов по маске в определенном каталоге
Такое лучше было бы сделать так
function FileList (DirName, Filter : String ; Dest: TSrings)
> function GetCMDLineFile (CommandLine : String) :
> String; // Получить командную строку приложения
Не понял.
> ShowInTaskBar
> GetFileLength
> GetAmpDir
> AppendSlash
Я предпочту написать эту одну строчку кода. Вместо того чтобы использовать функции этой библиотеки.
← →
Black_phoenix © (2005-01-05 06:40) [31]> Anatoly Podgoretsky © (04.01.05 18:38) [29]
> После 17-18 у кого то еще есть желание смотреть и теб более запускать?
А после 50 есть желание унижать других ! Как это знакомо :)
← →
KSergey © (2005-01-05 09:35) [32]> [31] Black_phoenix © (05.01.05 06:40)
> А после 50 есть желание унижать других ! Как это знакомо
А по существу (в том числе и на другие вопросы) нечего ответить??!
Странно, тогда мне действительно жаль потраченного мною времени на их написание, я надеялся на большее.
← →
Kair © (2005-01-05 10:48) [33]А так зачем?
type
TacsShell = class(TObject)
private
function regReadString(aKey: HKEY; const Path: String): String;
procedure regWriteString(aKey: HKEY; const Path: String; const Value: String);
procedure strStripLast(var S: String);
function strLastCh(const S: String): Char;
procedure regParsePath(const Path: String; var aPath: String; var aValue: String);
function GetApplicationFileName: String;
public
function AppendSlash(DirName: String): String;
function GetAmpDir: String;
function GetFileLength(FileName: String): Longint;
function GetCMDLineFile(CommandLine: String): String;
procedure SaveLangText(FileName: String);
procedure LoadLangText(FileName: String);
procedure ShowInTaskBar(ShowForm: Boolean);
procedure CreateRegClass(RegClassName: String; RegKeyDescr: String; IconIndex: Integer);
procedure RegExtension(RegExtName: String; RegClassName: String);
procedure SaveApplicationIni(SelForm: TForm);
procedure SaveParamIntToIni(IntParam: Integer; Section: String);
procedure SaveParamBoolToIni(BoolParam: Boolean; Section: String);
procedure SaveParamStrToIni(StrParam: String; Section: String);
procedure LoadApplicationIni(SelForm: TForm);
procedure LoadParamStrToIni(var StrParam: String; Section: String);
procedure LoadParamBoolToIni(var BoolParam: Boolean; Section: String);
procedure LoadParamIntToIni(var IntParam: Integer; Section: String);
procedure GetLangTags(FileName: String; var Author: String; var Lang: String; var Comment: String);
function FileList(DirName: String; Filter: String): TStringList;
end;
var
PlayerShell: TacsShell;
← →
KSergey © (2005-01-05 10:57) [34]> [33] Kair © (05.01.05 10:48)
> А так зачем?
Это о чем???
← →
Aristarh (2005-01-05 10:59) [35]>KSergey © (05.01.05 09:35) [32]
>Странно, тогда мне действительно жаль потраченного мною времени
>на их написание, я надеялся на большее.
Вот и ладушки. Самое время заняться работой вместо того, чтобы изгаляться над новичками.
← →
KSergey © (2005-01-05 11:07) [36]> [35] Aristarh (05.01.05 10:59)
> чтобы изгаляться над новичками.
Это изгаляться??!!
← →
Kair © (2005-01-05 11:37) [37]
> KSergey © (05.01.05 10:57) [34]
> > [33] Kair © (05.01.05 10:48)
> > А так зачем?
>
> Это о чем???
Это в его модуле написано было.
Думаю, в класс пихать было лишним.
← →
esu © (2005-01-05 11:43) [38]
> Так что не парьтесь ! Если можете написать лучше то пишите
> , если не можете так качайте и пользуйтесь на халяву :)
>
Дык откуда ж мне знать лучше я могу или хуже если нет исходников ? :) А так в интернете множество исходников для всех твоих функций но по крайней мере я смогу их нормально отладить, оценить качество реализации... Да и для совсем новичков полезнее наверное все ж с исходниками разбираться чем некий dcu юзать.
← →
Black_phoenix © (2005-01-06 15:32) [39]Вышло обновление модуля до верси 1.1 : www.club-soft.narod.ru/acs_utils_1.1.rar
- Обновление коснулось перевода контролов : теперь так же обрабатываються и Hint"s в таких компонентах как
TBitBtn
tSpeedButton
tPanel
TButton
TCheckBox
TRadioButton
Данные обрабатываються только в том случае если у компонента свойство ShowHint установлено в True и если в Hint есть текст
← →
TUser © (2005-01-06 15:41) [40]
> Вышло обновление модуля до верси 1.1
Я готов скачать билд 1.1.2.0.3А бета :)
← →
KSergey © (2005-01-06 16:11) [41]> [39] Black_phoenix © (06.01.05 15:32)
Спаршиваю последний раз: ответы на вопросы будут?
← →
Игорь Шевченко © (2005-01-06 17:43) [42]Дети Ивана Кулибина...
← →
GuAV © (2005-01-06 17:49) [43]Black_phoenix © (06.01.05 15:32) [39]
- Обновление коснулось перевода контролов : теперь так же обрабатываються и Hint"s в таких компонентах как
А почему бы не сделать для всех контролов ?
← →
Чеширский_Кот © (2005-01-06 17:55) [44]погодь, через 20 релизов усё будет...
← →
GuAV © (2005-01-06 18:29) [45]Не, я просто хочу понять, через RTTI реализовано, через "выскрытие" TControl, или тупо кодом для каждого из перечисленных... почему-то склонен к третьему варианту...
← →
Экспериментатор (2005-01-06 20:40) [46]Могу на спор написать
{{{procedure SaveLangText(FileName : String); // Сохранение в указанном файле Caption и Text всех видимых контролов
procedure LoadLangText(FileName : String); // Загрузка из указанного файла всех надписей контролов }}}
только обрабатываться(переводиться) будут все объекты у которых есть Caption Hint и.т.д.
RTTI - это сила
и это будет гораздо короче -
> Black_phoenix © (04.01.05 12:26)
ты даже не представляешь насколько короче
← →
Экспериментатор (2005-01-06 20:48) [47]
> GuAV © (06.01.05 18:29) [45]
Думаю что реализовано кодом для каждого из перечисленных...
Если через RTTI, то список объектов был бы неограниченным.
TO
> Black_phoenix © (04.01.05 12:26)
если вопросы, то прошу galera@narod.ru в теме пишите RTTI
← →
GuAV © (2005-01-06 21:22) [48]Ну, может там фсё таки RTTI заюзано, а насчёт короче - так через "вскрытие" TControl ещё короче. И тоже для всех.
← →
Игорь Шевченко © (2005-01-06 22:48) [49]GuAV © (06.01.05 21:22) [48]
> Ну, может там фсё таки RTTI заюзано, а насчёт короче - так
> через "вскрытие" TControl ещё короче. И тоже для всех.
Может и короче, но нафига вообще сохранять куда-то Caption и Hint ? :)
С уважением,
← →
GuAV © (2005-01-06 23:31) [50]Игорь Шевченко © (06.01.05 22:48) [49]
Предполагаю что для локализации.
Сам как-то с подобным экспериментирвал...
← →
Игорь Шевченко © (2005-01-06 23:53) [51]GuAV © (06.01.05 23:31) [50]
> Предполагаю что для локализации.
"в принципе - все побеждабельно и управляемо, хотя путь к гландам через анус по сравнению с этим - прям и гладок как шоссе гонок формулы 1"
(с) Толик Тенцер
← →
GuAV © (2005-01-07 00:23) [52]Игорь Шевченко © (06.01.05 23:53) [51]
LOL
Согласен.
← →
Black_phoenix © (2005-01-07 18:27) [53]// TBitBtn
if (obj is TBitBtn) then begin
inif.writestring(Sezione,(obj as TBitBtn).name,(obj as TBitBtn).Caption);
if ((obj as TBitBtn).ShowHint) and ((obj as TBitBtn).Hint <> "") then
inif.writestring(Sezione,(obj as TBitBtn).name+"_hint",(obj as TBitBtn).Hint);
end;
// SpeedButton
if (obj is TSpeedButton) then begin
inif.writestring(Sezione,(obj as TSpeedButton).name,(obj as TSpeedButton).Caption);
if ((obj as TSpeedButton).ShowHint) and ((obj as TSpeedButton).Hint <> "") then
inif.writestring(Sezione,(obj as TSpeedButton).name+"_hint",(obj as TSpeedButton).Hint);
end;
> GuAV © (06.01.05 18:29) [45]
Почему то склонен считать тебя гадом !
← →
GuAV © (2005-01-07 19:42) [54]Black_phoenix © (07.01.05 18:27) [53]
Значит в [45] я угадал.
Нет, ничего против такого варианта не имею, несмотря на упомянутую не-универсальность, т.к. всё равно - см посты Игоря Шевченко © , включая [42], [49] и [51].
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.037 c