Текущий архив: 2003.10.20;
Скачать: CL | DM;
Вниз
Глюк с PIcon? Вот код, который берёт из ресурса икону 32х32 и Найти похожие ветки
← →
Alexander © (2003-01-28 16:29) [0]рисует. Под Win NT/2k/Xp всё работает, а под Win98 рисуется икона 16х16. Что делать?
procedure TFormAbout.paintPrgLabelPaint(Sender: PControl; DC: HDC);
var
B: PIcon;
begin
paintPrgLabel.Canvas.FillRect(MakeRect(0, 0, paintPrgLabel.Width, paintPrgLabel.Height));
B := NewIcon;
B.LoadFromResourceName(HInstance, "MAINICON", 32);
B.Draw(DC, 0, 0);
B.Free;
end;
← →
Alexander © (2003-01-31 08:15) [1]Ни у кого идеи не появились?
← →
SPeller © (2003-01-31 11:41) [2]У всех своих проблем хватает. Раз уж никто не отвечает, посмотри сам как всё сделано. Исходники благо есть.
← →
Kladov (2003-01-31 15:17) [3]Может, надо было
B := NewIcon; B.Size := 32;
?
(а там вообще есть такая иконка, в ресурсе-то?)
← →
Alexander © (2003-02-05 13:49) [4]Иконка в ресурсе есть - я один и тот-же файл запускаю под 98 и 2000. Под 2000 работает (и под NT/XP), а вот под 98 - нет. Изменение B.Size := 32 не помогло.
← →
Kladov (2003-02-05 17:07) [5]Я не о том, что вообще есть иконка. А о том, что в ней есть вариант 32х32. Если она изначально создавалась как только 16x16, и нет варианта 32х32. Или есть оба. То возможно, это 9х так поступает - выбирает из ресурса первое, что попадет. Что если ему дать именно иконку 32х32.
← →
Alexander © (2003-02-05 21:06) [6]Я о том и пишу - скомпилировал файл, который содержит иконки 16х16 и 32х32. При запуске под NT/2k/XP рисуется 32х32, а под 98 рисуется 16х16.
← →
Kladov (2003-02-05 21:38) [7]Вооот. Надо держать иконку 32х32 отдельно, а не в виде одной иконки в двух форматах. Тогда LoadImage в 98 вынужден будет брать только ту, что есть в этом ресурсе.
← →
Alexander © (2003-02-06 11:56) [8]Оставил я только 32х32 и что в результате? А то-же самое!!! Рисуется 16х16 в уменьшенном виде!
← →
Alexander © (2003-02-06 12:26) [9]Владимир, для 9х нужно писать так:
Handle := LoadImage( Inst, ResName, IMAGE_ICON, DesiredSize, DesiredSize, 0);
или можно вставить директиву условной компиляции.
← →
SPeller © (2003-02-06 13:24) [10]Из WinSDK:
The LoadImage function loads an icon, cursor, or bitmap.
Parameters
cxDesired
Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.
cyDesired
Same as cxDesired.
fuLoad
LR_DEFAULTSIZE: Uses the width or height specified by the system metric values for cursors or icons, if the cxDesired or cyDesired values are set to zero. If this flag is not specified and cxDesired and cyDesired are set to zero, the function uses the actual resource size. If the resource contains multiple images, the function uses the size of the first image.
Теперь смотрим что такое SM_CXICON:
SM_CXICON, SM_CYICON: The default width and height, in pixels, of an icon. These values are typically 32x32, but can vary depending on the installed display hardware.The LoadIcon function can only load icons of these dimensions.
Читаем и делаем выводы.
← →
Alexander © (2003-02-06 13:50) [11]Это я всё прочитал. Просто в KOL такой код:
procedure TIcon.LoadFromResourceName(Inst: Integer; ResName: PChar; DesiredSize: Integer);
begin
Handle := LoadImage( Inst, ResName, IMAGE_ICON, DesiredSize, DesiredSize,
$8000 {LR_SHARED} );
{if Handle = 0 then
( Inst, ResName )Это я всё прочитал. Просто в KOL такой код:
procedure TIcon.LoadFromResourceName(Inst: Integer; ResName: PChar; DesiredSize: Integer);
begin
Handle := LoadImage( Inst, ResName, IMAGE_ICON, DesiredSize, DesiredSize,
$8000 {LR_SHARED} );
{if Handle = 0 then
Handle := LoadIcon( Inst, ResName )
else}
if fHandle <> 0 then FShareIcon := True;
end;
и это (LR_SHARED) не работает для 9x, точнее работает, но иконка берётся первая попавшаяся, а без LR_SHARED берётся та, какие размеры указал.
← →
Kladov (2003-02-06 20:52) [12]Тогда кто запрещает вызвать LoadImage самому?
← →
Alexander © (2003-02-06 21:03) [13]Я в итоге так и сделал - вызвал самостоятельно, но ведь неправильно это - когда вместо стандартного метода надо вызывать что-то своё.
Страницы: 1 вся ветка
Текущий архив: 2003.10.20;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.016 c