Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизА можно ли как-то заполучить строки вроде «Да», «Отмена» из Win? Найти похожие ветки
← →
Kolan © (2007-12-19 08:57) [0]Виндовый MessageBox же как-то их получает, причем строки соответствуют языку винды.
Если можно, то как?
← →
DVM © (2007-12-19 10:37) [1]
> Kolan © (19.12.07 08:57)
Очень просто, загрузить нужный ресурс из нужной DLL. Скорее всего это будет та dll в которой находится функция для создания MessageBox.
← →
Kolan © (2007-12-19 10:47) [2]> Очень просто, загрузить нужный ресурс из нужной DLL.
user32 ?
А как енто сделать?
← →
Palladin © (2007-12-19 10:53) [3]исследовать user32.dll ResXplor"эром
← →
palva © (2007-12-19 10:56) [4]Открыть dll каким либо редактором ресурсов (MS Visual Studio) и посмотреть идентификатор нужных строк. Ну а потом все просто: загружаем нужную библиотеку загружаем ресурс... Немного посложнее, если ресурс не строковый, а вшит в диалог (диалог это тоже ресурс) его труднее достать. Но где-то должны обязательно лежать эти тексты и отдельно.
← →
Kolan © (2007-12-19 11:17) [5]Нашел есть там такой ресурс, чем(какими API функциями) теперь их получить?
← →
Kolan © (2007-12-19 11:21) [6]
STRINGTABLE
LANGUAGE LANG_RUSSIAN, 0x1
{
800, «ОК»
801, «Отмена»
802, «Пр&ервать»
803, «По&втор»
804, «&Пропустить»
805, «&Да»
806, «&Нет»
807, «&Закрыть»
808, «Справка»
809, «&Повторить»
810, «&Продолжить»
}
От они…
← →
clickmaker © (2007-12-19 11:25) [7]
> [5] Kolan © (19.12.07 11:17)
LoadString(GetModuleHandle("user32.dll"), 801, szText, sizeof(szText));
← →
palva © (2007-12-19 11:25) [8]LoadLibrary
LoadString
← →
Kolan © (2007-12-19 11:42) [9]
function LoadResourceString(AModuleName: string; AnID: Cardinal): string;
var
Buffer: array[0𠢇] of Char;
begin
LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
Result := StrPas(Buffer);
end;
Правильно? С памятью не напортачил?
← →
Palladin © (2007-12-19 11:47) [10]так быстрее
Function ls(Const s:String;ah:Cardinal):String;
Begin
SetLength(Result,5000);
SetLength(Result,LoadString(GetModuleHandle(PChar(s)),ah,@Result[1],5000));
End;
← →
Kolan © (2007-12-19 11:50) [11]803, «По&втор»
809, «&Повторить»
Как по английски?
← →
Kolan © (2007-12-19 11:51) [12]
> так быстрее
Но мое правильное?
← →
Palladin © (2007-12-19 11:55) [13]
> Но мое правильное?
ну да...
← →
Kolan © (2007-12-19 12:03) [14]> ну да…
Ок
803, «По&втор»
Retry
809, «&Повторить»
Try Again чтоли?
← →
clickmaker © (2007-12-19 12:06) [15]
> [14] Kolan © (19.12.07 12:03)
Retry в русской 2000 на кнопке отображается как "Повторить поп" )
← →
Kolan © (2007-12-19 12:09) [16]Се, получилось. Постю сюда модуль, мало ли мож кому пригодится…
unit KSystemResourceStrings;
interface
const
OkID = 800;
CancelID = 801;
AbortID = 802;
RetryID = 803;
IgnoreID = 804;
YesID = 805;
NoID = 806;
CloseID = 807;
HelpID = 808;
TryAgainID = 809;
ContinueID = 810;
function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
function LoadUser32ResourceString(AnID: Cardinal): string;
function LoadOkString: string;
function LoadCancelString: string;
function LoadAbortString: string;
function LoadRetryString: string;
function LoadIgnoreString: string;
function LoadYesString: string;
function LoadNoString: string;
function LoadCloseString: string;
function LoadHelpString: string;
function LoadTryAgainString: string;
function LoadContinueString: string;
implementation
uses
Windows,SysUtils;
function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
var
Buffer: array[0𠢇] of Char;
begin
Result := "";
LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
Result := StrPas(Buffer);
end;
function LoadUser32ResourceString(AnID: Cardinal): string;
begin
Result := LoadResourceString("user32.dll", AnID);
end;
function LoadOkString: string;
begin
Result := LoadUser32ResourceString(OkID);
end;
function LoadCancelString: string;
begin
Result := LoadUser32ResourceString(CancelID);
end;
function LoadAbortString: string;
begin
Result := LoadUser32ResourceString(AbortID);
end;
function LoadRetryString: string;
begin
Result := LoadUser32ResourceString(RetryID);
end;
function LoadIgnoreString: string;
begin
Result := LoadUser32ResourceString(IgnoreID);
end;
function LoadYesString: string;
begin
Result := LoadUser32ResourceString(YesID);
end;
function LoadNoString: string;
begin
Result := LoadUser32ResourceString(NoID);
end;
function LoadCloseString: string;
begin
Result := LoadUser32ResourceString(CloseID);
end;
function LoadHelpString: string;
begin
Result := LoadUser32ResourceString(HelpID);
end;
function LoadTryAgainString: string;
begin
Result := LoadUser32ResourceString(TryAgainID);
end;
function LoadContinueString: string;
begin
Result := LoadUser32ResourceString(ContinueID);
end;
end.
← →
Palladin © (2007-12-19 12:10) [17]
> 809, «&Повторить»
> Try Again чтоли?
Retry помоему
← →
Palladin © (2007-12-19 12:11) [18]
> [16] Kolan © (19.12.07 12:09)
а зачем ввиде функций? лучше на initialization считать и определить как глобальные переменные
← →
Kolan © (2007-12-19 12:11) [19]> Retry в русской 2000 на кнопке отображается как «Повторить
> поп» )
Нет суда по MessageBox и его флагу MB_ABORTRETRYIGNORE — 803, «По&втор» — это Retry
← →
Kolan © (2007-12-19 12:12) [20]
> а зачем ввиде функций? лучше на initialization считать и
> определить как глобальные переменные
Хз, сделал так… Иначе в голову не пришло.
← →
Kolan © (2007-12-19 12:13) [21]
> лучше на initialization считать и определить как глобальные
> переменные
Да и как говорит Leonid Tryanovsky Глобальные переменные MD и я к нему присоединяюсь. :)
← →
Palladin © (2007-12-19 12:15) [22]дык блин глобальные переменные глобальным перменным рознь... если прямо так смущают что глобальные, то заведи их локально в модуле и в функциях возвращай их значение... а так глобальных переменных на самом деле очень даже много... DecimalSeparator например..
← →
Kolan © (2007-12-19 12:19) [23]> заведи их локально в модуле и в функциях возвращай их значение…
Ну а почему бы тогда просто функции не оставить?
Или ты хочешь сказать, что тогда пользователю придется помнить, что стоит эти функции вызывать в цикле, так как каждый раз будет обращение?
← →
Palladin © (2007-12-19 12:21) [24]
> [23] Kolan © (19.12.07 12:19)
дело хозяйское, просто не вижу смысла каждый раз получать значения из dll
> что тогда пользователю придется помнить, что стоит эти функции
> вызывать в цикле, так как каждый раз будет обращение?
и это тоже
← →
Kolan © (2007-12-19 12:23) [25]> каждый раз получать значения из dll
Ок переделаю шас.
← →
Kolan © (2007-12-19 13:41) [26]> каждый раз получать значения из dll
Ок переделаю шас.
…
Переделалunit KSystemResourceStrings;
interface
const
OkID = 800;
CancelID = 801;
AbortID = 802;
RetryID = 803;
IgnoreID = 804;
YesID = 805;
NoID = 806;
CloseID = 807;
HelpID = 808;
TryAgainID = 809;
ContinueID = 810;
function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
function LoadUser32ResourceString(AnID: Cardinal): string;
function GetOkString: string;
function GetCancelString: string;
function GetAbortString: string;
function GetRetryString: string;
function GetIgnoreString: string;
function GetYesString: string;
function GetNoString: string;
function GetCloseString: string;
function GetHelpString: string;
function GetTryAgainString: string;
function GetContinueString: string;
implementation
uses
Windows,SysUtils;
var
OkS: string;
CancelS: string;
AbortS: string;
RetryS: string;
IgnoreS: string;
YesS: string;
NoS: string;
CloseS: string;
HelpS: string;
TryAgainS: string;
ContinueS: string;
function LoadResourceString(AModuleName: string;
AnID: Cardinal): string;
var
Buffer: array[0𠢇] of Char;
begin
Result := "";
LoadString(GetModuleHandle(PAnsiChar(AModuleName)), AnID, Buffer, SizeOf(Buffer));
Result := StrPas(Buffer);
end;
function LoadUser32ResourceString(AnID: Cardinal): string;
begin
Result := LoadResourceString("user32.dll", AnID);
end;
function GetOkString: string;
begin
Result := OkS;
end;
function GetCancelString: string;
begin
Result := CancelS;
end;
function GetAbortString: string;
begin
Result := AbortS;
end;
function GetRetryString: string;
begin
Result := RetryS;
end;
function GetIgnoreString: string;
begin
Result := IgnoreS;
end;
function GetYesString: string;
begin
Result := YesS;
end;
function GetNoString: string;
begin
Result := NoS;
end;
function GetCloseString: string;
begin
Result := CloseS;
end;
function GetHelpString: string;
begin
Result := HelpS;
end;
function GetTryAgainString: string;
begin
Result := TryAgainS;
end;
function GetContinueString: string;
begin
Result := ContinueS;
end;
initialization
OkS := LoadUser32ResourceString(OkID);
CancelS := LoadUser32ResourceString(CancelID);
AbortS := LoadUser32ResourceString(AbortID);
RetryS := LoadUser32ResourceString(RetryID);
IgnoreS := LoadUser32ResourceString(IgnoreID);
YesS := LoadUser32ResourceString(YesID);
NoS := LoadUser32ResourceString(NoID);
CloseS := LoadUser32ResourceString(CloseID);
HelpS := LoadUser32ResourceString(HelpID);
TryAgainS := LoadUser32ResourceString(TryAgainID);
ContinueS := LoadUser32ResourceString(ContinueID);
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.046 c