2. Всегда располагаю файл помощи в том же каталоге, что и приложение
Назначаю файл помощи в обработчике события главной формы OnCreate таким образом:
Application.HelpFile := ChangeFileExt(Application.ExeName, '.HLP');
– Neil Rubenking
Как сделать так, чтобы в приложении вызывался хелп с окошечком для поиска раздела?
Nomadic советует:
1.
unit {$IFDEF WIN32} Windows {$ELSE} WinProcs {$ENDIF};
function WinHelp(Wnd: HWnd; HelpFile: PChar; Command: Word; Data: LongInt): Bool;
Здесь цитата из WinAPI Help:
HELP_CONTEXTPOPUP
An unsigned long integer containing the context number for a topic. Displays in a pop-up window a particular Help topic identified by a context number that has been defined in the [MAP] section of the .HPJ file.
2. То же самое, что делает макрос «Search()» для WinHelp-а.
procedure TForm1.HelpSearchFor;
var S: String;
begin
S := '';
Application.HelpFile := 'C:\MYAPPPATH\MYHELP.HLP';
Application.HelpCommand(HELP_PARTIALKEY, LongInt(@S));
end;
Как заставить Help-файлы нормально отображать русский текст под Windows 3.x?
Nomadic советует:
Удалось вылечить дописыванием в файл проекта в графу Options строчки FORCEFONT=Arial Cyr, причем HC31 ругается что нет такого шрифта, но зато хелп потом нормально показывается практически под любой руссифицированной виндой.
Проверял с [Win31+CyrWin], [Win311Rus], [Win95PE], [Win95Rus].
На NT не проверял.
Причем шрифты в тексте ноомально переключаются и будут не только Arial.
Вот кусок который надо вставить в HPJ файл перед компиляцией –
[OPTIONS]
FORCEFONT=Arial Cyr
Графика
256-цветное изображение из res-файла
Вот функция, правильно читающая 256-цветные изображения из файла ресурсов.
function LoadBitmap256(hInstance: HWND; lpBitmapName: PChar): HBITMAP;
var
hPal, hRes, hResInfo: THandle;
pBitmap: PBitmapInfo;
nColorData: Integer;
pPalette: PLogPalette;
X: Integer;hPalette: THandle;
begin
hResInfo:= FindResource(hInstance, lpBitmapName, RT_BITMAP);
hRes:= LoadResource(hInstance, hResInfo);
pBitmap:= Lockresource(hRes);
nColorData:= pBitmap^.bmiHeader.biClrUsed;
hPal := GlobalAlloc(GMEM_MOVEABLE, (16 * nColorData));
{hPal := GlobalAlloc(GMEM_MOVEABLE, (SizeOf(LOGPALETTE) + (nColorData * SizeOf(PALETTEENTRY)));}
pPalette := GlobalLock(hPal);
pPalette^.palVersion := $300;
pPalette^.palNumEntries := nColorData;
for x := 0 to nColorData do begin
pPalette^.palPalentry[X].peRed := pBitmap^.bmiColors[X].rgbRed;
pPalette^.palPalentry[X].peGreen := pBitmap^.bmiColors[X].rgbGreen;
pPalette^.palPalentry[X].peBlue := pBitmap^.bmiColors[X].rgbBlue;
end;
hPalette := CreatePalette(pPalette^);
GlobalUnlock(hRes);
GlobalUnlock(hPal);
GlobalFree(hPal);
end;
end.
– Mark Lussier
Как записать содержимое окна OpenGL в 'bmp' файл?
Nomadic советует:
Вот что попробовал – вроде получилось:
bt := TBitmap.Create;
bt.Width := gr.Width;
bt.Height := gr.Height;
bt.Canvas.CopyRect(ClientRect, gr.Canvas, gr.ClientRect);
bt.SaveToFile('e:\bt.bmp');
bt.Free;
(gr – объект, в канве которого я рисую с помощью OpenGL)
Как создать disable'ный битмап из обычного (emboss etc)?
Nomadic советует:
CreateMappedBitmap() :-)
Один из параметров указатель на COLORMAP, в нем для 16 основных цветов делаешь перекодировку, цвета подберешь сам из принципа:
• все самые яркие → в GetSysColor(COLOR_3DLIGHT);
• самые темные → GetSysColor(COLOR_3DSHADOW);
• нейтральные, которые бyдyт прозрачными → GetSysColor(COLOR_3DFACE);
Так на самом деле вот как делается данная задача:
procedure Tform1.aaa(bmpFrom, bmpTo:Tbitmap);
var
TmpImage,Monobmp:TBitmap;
IRect:TRect;
begin
MonoBmp := TBitmap.Create;
TmpImage:=Tbitmap.Create;
TmpImage.Width := bmpFrom.Width;
TmpImage.Height := bmpFrom.Height;
IRect := Rect(0, 0, bmpFrom.Width, bmpFrom.Height);
TmpImage.Canvas.Brush.Color := clBtnFace;
try
with MonoBmp do begin
Assign(bmpFrom);
Canvas.Brush.Color := clBlack;
if Monochrome then begin
Canvas.Font.Color := clWhite;
Monochrome := False;
Canvas.Brush.Color := clWhite;
end;
Monochrome := True;
end;
with TmpImage.Canvas do begin
Brush.Color := clBtnFace;
FillRect(IRect);
Brush.Color := clBlack;
Font.Color := clWhite;
CopyMode := MergePaint;
Draw(IRect.Left + 1, IRect.Top + 1, MonoBmp);
CopyMode := SrcAnd;
Draw(IRect.Left, IRect.Top, MonoBmp);
Brush.Color := clBtnShadow;
Font.Color := clBlack;
CopyMode := SrcPaint;
Draw(IRect.Left, IRect.Top, MonoBmp);
CopyMode := SrcCopy;
bmpTo.assign(TmpImage);
TmpImage.free;
end;
finally
MonoBmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
aaa(image1.picture.bitmap,image2.picture.bitmap);
Image2.invalidate;
end;
Писал это не я. Это написал сам Борланд (некузявно было бы взглянуть на класс TButtonGlyph. Как раз из него я это и выдернул). Ну а если уже совсем хорошо разобраться, то можно заметить функцию ImageList_DrawEx, в которой можно на 25 и 50 процентов уменьшить яркость (но визуально это очень плохо воспринимается). Соответственно параметры ILD_BLEND25, ILD_BLEND50, ILD_BLEND-A-MED. Естественно, что последний абзац работает только с тройкой.