Склонение день, дня, дней

function lastDigitToWord(digit)
{
var lastFigure = parseInt(digit.toString().substr(digit.toString().length - 1, 1));
if (digit > 11 && digit < 15) { return 'Дней'; }
else { if (lastFigure == 1) return 'День'; if (lastFigure > 1 && lastFigure < 5) return 'Дня'; if (lastFigure == 0 || lastFigure >= 5) return 'Дней';
}

}

Выполнение

var days = [10, 13, 1, 25, 2, 5, 4, 344];
var result = '';
for (var i in days)
{
result += days[i].toString() + ' - ' + lastDigitToWord(days[i]) + '\n';
}

alert(result);

Перенос настройки подключений dbForge Studio for MySQL

Иногда возникает необходимость перенести настройки подключений dbForge Studio for MySQL с одного рабочего места на другое.

Это легко сделать скопировав ветку реестра HKEY_CURRENT_USER\SOFTWARE\Devart\dbForge Common Settings\Connections

MyDAC NULL is not a valid integer value for field…

Иногда при использовании компонент MyDAC, при вставке записи возникает ошибка типа NULL is not a valid integer value for field…
Чтобы её исправить, в свойствах компонента TMyQuery -> Options выставить параметр DefaultValues = False

Сохранение пользовательских настроек

Я хотел бы новые пользовательские цвета записывать на место старых, записываемых Delphi в файл ресурса, чтобы при следующем открытии формы, она автоматически сама отображала бы новую цветовую схему.

Вы можете легко это сделать, передавая форму при закрытии в поток для записи ее в отдельный файл. Затем, когда это создано, проверяйте наличие файла и организуйте его чтение. Вот как можно это сделать:

const

FileName = 'Form1.stm';

constructor TForm1.Create(AOwner: TComponent);

begin

if FileExists(FileName) then

begin

CreateNew(AOwner);

ReadComponentResFile(FileName, Self);

end

else

inherited Create(AOwner);

{ поместите здесь код в стиле 'OnCreate' }

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

WriteComponentResFile(FileName, Self);

end;

Имейте в виду, что это не вызывает OnCreate. В действительности, вам OnCreate и не нужен, поскольку сюда вы можете поместить код, необходимый в обработчике OnCreate; данный код следует поместить после конструктора Create, как и указано в комментарии.

 

Создание двоичных ресурсных файлов

constants:

keyword:

BITMAP *.bmp

CURSOR *.cur

ICON *.ico

SOUND *.wav

VIDEO *.avi

load-option:

PRELOAD

LOADONCALL

mem-option:

FIXED

MOVEABLE

DISCARDABLE

Create a new textfile.

content:

10 BITMAP PRELOAD test.bmp

20 WAVE test.wav

Save the file as binres.rc

compile the file: brc32.exe -r binres.rc

You have now the compiled resource file binres.res

----------------------------------------------------------

Syntax

ID keyWord [load-option] [mem-option] dateiname

konstanten:

keyword:

BITMAP *.bmp

CURSOR *.cur

ICON *.ico

SOUND *.wav

VIDEO *.avi

load-option:

PRELOAD

LOADONCALL

mem-option:

FIXED

MOVEABLE

DISCARDABLE

Erstellen Sie eine neue Textdatei.

Inhalt:

10 BITMAP PRELOAD test.bmp

20 WAVE test.wav

Speichern Sie die Datei als binres.rc ab.

Compilieren Sie die Datei: brc32.exe -r binres.rc

Es wurde nun die Resource Datei binres.res erstellt.

Создание RES-файла с помощью BRCC.EXE

Данный метод обходит проблемы, связанные с Image Editor.

В каталоге \DELPHI\BIN имеется утилита коммандной строки, названная BRCC.EXE, позволяющая создавать из файлов, содержащих изображения/иконки, RES-файлы, в обход Image Editor. (Тем не менее, Image Editor хорошо работает при создании или редактировании файлов с изображениями или курсорами. Проблемой был импорт.)

Resource File Compiler описан в справке Windows API help в главе Windows Tools (где вы также можете прочесть о RC.EXE как о BRCC.EXE!). Это сэкономит вам какое-то время!

Сначала, используя Блокнот, создайте файл определения ресурса (Resource Definition) (текстовый) с именем, скажем, MYRES.RC (с обязательным расширением RC). Разместите, каждую на отдельной строке, ссылки на изображения, иконки, и т.п., которые вы хотели бы включить в RES-файл, например:

BITMAP1 BITMAP

BITMAP2 BITMAP

CURSOR1 CURSOR

ICON1 ICON

Затем (это не обязательно, но сохранит массу времени, особенно если вы экспериментируете), в том же каталоге создайте BAT-Файл, вызывающий программу для компиляции каждого ресурса:

«C:\DELPHI\BIN\BRCC/R %1»

Назовите его, скажем, MAKERES.BAT.

Перейдите в DOS и в каталоге проекта введите «MAKERES MYRES.RC». Заданные ресурсы будут скомпилированы в новый файл MYRES.RES, который может быть прилинкован к вашему проекту как и прежде. Используйте Image Editor для проверки и редактирования.

 

Работа с ресурсами – загрузка иконки и курсора

program resource;

uses

Forms,

MainFrm in 'MainFrm.pas' {MainForm};

{$R *.RES}

{$R RESFILE2.RES} // Add the additional resource file

begin

Application.Initialize;

Application.CreateForm(TMainForm, MainForm);

Application.Run;

end.

 

unit MainFrm;

interface

uses

Windows, Forms, Controls, Classes, StdCtrls, ExtCtrls;

const

crXHair = 1; // Declare a constant for the new cursor. This value

type // must be a positive number. or less than -20.

TMainForm = class(TForm)

imgBitmap: TImage;

btnChemicals: TButton;

btnClear: TButton;

btnChangeIcon: TButton;

btnNewCursor: TButton;

btnOldCursor: TButton;

btnOldIcon: TButton;

btnAthena: TButton;

procedure btnChemicalsClick(Sender: TObject);

procedure btnClearClick(Sender: TObject);

procedure btnChangeIconClick(Sender: TObject);

procedure btnNewCursorClick(Sender: TObject);

procedure btnOldCursorClick(Sender: TObject);

procedure btnOldIconClick(Sender: TObject);

procedure btnAthenaClick(Sender: TObject);

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.btnChemicalsClick(Sender: TObject);

begin

{ Load the bitmap from the resource file. The bitmap must be

specified in all CAPS! }


imgBitmap.Picture.Bitmap.LoadFromResourceName(hInstance, 'CHEMICAL');

end;

procedure TMainForm.btnClearClick(Sender: TObject);

begin

imgBitmap.Picture.Assign(nil); // Clear the image

end;

procedure TMainForm.btnChangeIconClick(Sender: TObject);

begin

{ Load the icon from the resource file. The icon must be

specified in all CAPS! }


Application.Icon.Handle := LoadIcon(hInstance, 'SKYLINE');

end;

procedure TMainForm.btnNewCursorClick(Sender: TObject);

begin

{ Assign the new cursor to the Screen's Cursor array }

Screen.Cursors[crXHair] := LoadCursor(hInstance, 'XHAIR');

Screen.Cursor := crXHair; // Now change the cursor

end;

procedure TMainForm.btnOldCursorClick(Sender: TObject);

begin

// Change back to default cursor

Screen.Cursor := crDefault;

end;

procedure TMainForm.btnOldIconClick(Sender: TObject);

begin

{ Load the icon from the resource file. The icon must be

specified in all CAPS! }


Application.Icon.Handle := LoadIcon(hInstance, 'DELPHI');

end;

procedure TMainForm.btnAthenaClick(Sender: TObject);

begin

{ Load the bitmap from the resource file. The bitmap must be

specified in all CAPS! }


imgBitmap.Picture.Bitmap.LoadFromResourceName(hInstance, 'ATHENA');

end;

end.

Пример ресурсной таблицы строк

Как мне создать ресурсную таблицу строк (Resource String Table), про которую упоминается в функции FmtLoadStr, но не сказано как создать эту таблицу, про это вообще нигде не сказано!

Создайте файл в приведенном ниже формате и обзовите его, скажем (подойдите к этому творчески), strings.rc:

STRINGTABLE LOADONCALL MOVEABLE DISCARDABLE

{

1, «UNPACK.INI»

2, «AcrobatClass»

3, «ACROEXCH.EXE»

4, «^.PDF»

5, «Extensions»

6, «ACROEXCH.EXE»

7, «PDF»

8, «AABSETUP.EXE»

9, «DelFiles-»

10, «INI-»

11, «UNPACK.INI»

12, «ACROSRCH.DLL»

13, «Regedit»

14, «ACROREAD.EXE»

15, «ACRO_LE.EXE»

}

Затем, с помощью компилятора ресурсов Borland (BRCC.EXE в вашем каталоге Delphi\Bin), скомпилируйте это в файл ресурсов:

BRCC strings.rc

Вы получите файл с именем strings.res. В вашем .DPR-файле после строки {$R *.RES} добавьте строку {$R STRINGS.RES}, после этого строковые ресурсы будут компилироваться с вашим exe-файлом.

 

Получить все имена ресурсов, что были загружены данным приложением

type

TForm1 = class(TForm)

Button1: TButton;

Memo1: TMemo;

procedure Button1Click(Sender: TObject);

private

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

function enumResNamesProc(module: HMODULE; restype, resname: PChar;

list: TStrings): Integer; stdcall;

begin

if HiWord(Cardinal(resname)) 0 then

list.Add(' ' resname)

else

list.Add(Format(' #%d', [loword(Cardinal(resname))]));

Result := 1;

end;

Function StockResourceType(restype: PChar): string;

const

restypenames: Array [1..22] of String =

( 'RT_CURSOR', // = MakeIntResource(1);

'RT_BITMAP', // = MakeIntResource(2);

'RT_ICON', // = MakeIntResource(3);

'RT_MENU', // = MakeIntResource(4);

'RT_DIALOG', // = MakeIntResource(5);

'RT_STRING', // = MakeIntResource(6);

'RT_FONTDIR',// = MakeIntResource(7);

'RT_FONT', // = MakeIntResource(8);

'RT_ACCELERATOR',// = MakeIntResource(9);

'RT_RCDATA', // = MakeIntResource(10);

'RT_MESSAGETABLE',// = MakeIntResource(11);

// DIFFERENCE = 11;

'RT_GROUP_CURSOR',// = MakeIntResource(DWORD(RT_CURSOR 7DIFFERENCE));

'UNKNOWN', // 13 not used

'RT_GROUP_ICON', // = MakeIntResource(DWORD(RT_ICON DIFFERENCE));

'UNKNOWN', // 15 not used

'RT_VERSION', // = MakeIntResource(16);

'RT_DLGINCLUDE', // = MakeIntResource(17);

'UNKNOWN',

'RT_PLUGPLAY', // = MakeIntResource(19);

'RT_VXD', // = MakeIntResource(20);

'RT_ANICURSOR', // = MakeIntResource(21);

'RT_ANIICON' // = MakeIntResource(22);

);

var

resid: Cardinal absolute restype;

begin

if resid in [1..22] then

Result := restypenames[resid]

else

Result := 'UNKNOWN';

end;

function enumResTypesProc(module: HMODULE; restype: PChar; list: TStrings): Integer; stdcall;

begin

if HiWord(Cardinal(restype)) 0 then

list.Add(restype)

else

list.Add(Format('Stock type %d: %s', [LoWord(Cardinal(restype)),

StockResourcetype(restype)]));

EnumResourceNames(module, restype, @enumResNamesProc, Integer(list));

Result := 1;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

memo1.Clear;

if not EnumResourceTypes(hinstance, @enumResTypesProc, Integer(memo1.Lines)) then

memo1.Lines.Add(Format('GetLastError= %8.8x', [GetLastError]))

else

memo1.Lines.Add('Successful');

end;

end.

Ошибка дублирования идентификатора ресурса

У вас есть исходный код VCL? Если да, то в этом случае ее можно всю перекомпилировать, добавив каталог к вашему библиотечному пути (Library path) в опциях среды (Environment Options | Library). Я думаю это нужно сделать, чтобы отделаться от этой ошибки. При другом способе необходимо вычислить вызывающую проблему директиву $R, временно удалить ее, и осуществить перекомпиляцию. Временно выключить директиву $R можно добавлением ‘.’ перед $ (но это не единственный путь выключить ее).

Вероятно, вы сабкласситесь от VCL. Убедитесь в том, что идентификатор ресурса для вашей иконки уникальный. Просто загрузите ее в любой редактор ресурсов, и измените ее номер. После этого вы должны пересобрать вашу библиотеку.