Как достать caption PropertyPage без инициализации?
Собственно пытался это делать через
HRSRC hResInfo = FindResource(NULL,pszTemplate,RT_DIALOG);
auto hTemplate = LoadResource(NULL,hResInfo );
const unsigned char* data = static_cast<const unsigned char*>(LockResource(hTemplate));
но как то не понял к чему привести data чтобы достать caption.
Здравствуйте, collider, Вы писали:
C>Как достать caption PropertyPage без инициализации?
C>Собственно пытался это делать через
C>C>HRSRC hResInfo = FindResource(NULL,pszTemplate,RT_DIALOG);
C>auto hTemplate = LoadResource(NULL,hResInfo );
C>const unsigned char* data = static_cast<const unsigned char*>(LockResource(hTemplate));
C>
C>но как то не понял к чему привести data чтобы достать caption.
DLGTEMLATE[EX]?
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, collider, Вы писали:
C>>Как достать caption PropertyPage без инициализации?
C>>Собственно пытался это делать через
C>>C>>HRSRC hResInfo = FindResource(NULL,pszTemplate,RT_DIALOG);
C>>auto hTemplate = LoadResource(NULL,hResInfo );
C>>const unsigned char* data = static_cast<const unsigned char*>(LockResource(hTemplate));
C>>
C>>но как то не понял к чему привести data чтобы достать caption.
C>DLGTEMLATE[EX]?
но caption-а в этой структуре нету.
Здравствуйте, collider, Вы писали:
C>но caption-а в этой структуре нету.
Но он есть чуть по дальше в этом участке памяти.
1) Определяем, с чем имеем дело, с DLGTEMLATE или DLGTEMLATEEX.
function IsExtended(ATemplate: PByte): Boolean;
begin
Result := (PDlgTemplateEx(ATemplate).dlgVer = 1) and
(PDlgTemplateEx(ATemplate).signature = $FFFF);
end;
2) Пропускаем саму структуру.
3) Код чтения строки (используется далее):
function ReadString(var AData: PWideChar): UnicodeString;
var
Len, Pos: Integer;
begin
Len := 64;
Pos := 0;
SetLength(Result, Len);
while AData^ <> #0 do
begin
Inc(Pos);
if Pos > Len then
begin
Len := Len * 2;
SetLength(Result, Len);
end;
Result[Pos] := AData^;
Inc(AData);
end;
SetLength(Result, Pos);
Inc(AData);
end;
function ReadStringEx(var AData: PByte; AAllowID: Boolean): UnicodeString;
begin
Result := '';
case PWORD(AData)^ of
$0000:
Inc(AData, SizeOf(Word)); // No
$FFFF:
if AAllowID then
Inc(AData, SizeOf(Word) * 2) // ID
else
Result := ReadString(PWideChar(AData));
else
Result := ReadString(PWideChar(AData));
end;
end;
4) Пропускаем две строки и читаем нужный тебе заголовок:
ReadStringEx(AData, True); // Skip menu
ReadStringEx(AData, True); // Skip class
FCaption := ReadStringEx(AData, False);