Попробовал использовать для склонения фамилий
Padeg.dll. Работает склонение если нет инициалов. Если выбираю в комбобоксе "Иванов" в едите выдает "Иванову". Проблема в том что не хочет склонять если с фамилией идут инициалы (Иванов И.И.).
У меня padeg.dll в папке с программой.
Код:
public
{ Public declarations }
end;
var
DllHandle : HMODULE;
GetFIOPadeg : function (pLastName, pFirstName, pMiddleName: PChar;
bSex: Boolean; nPadeg: LongInt; pResult: PChar;
var nLen: LongInt): Integer; stdcall;
Form2: TForm2;
Sex:boolean;
nLen:LongInt;
pResult:PChar;
pVar:integer;
FPadeg:Boolean;
Fio,nName,SName:string;
implementation
procedure TForm2.ComboBox2Chenge(Sender: TObject);
begin
Fio:=ComboBox2.Text;
Sex:=True;
if Assigned(GetFIOPadeg) then
begin
nLen := Length(FIO)+10;
pResult:=StrAlloc(nLen);
try
pVar:=GetFIOPadeg(PChar(Fio),'','',Sex,3, pResult, nLen);
Edit3.Text:=pResult;
finally
StrDispose(pResult);
end;
end;
end;procedure TForm12.ComboBox2Chenge(Sender: TObject);
begin
Fio:=ComboBox2.Text;
Sex:=True;
if Assigned(GetFIOPadeg) then
begin
nLen := Length(FIO)+10;
pResult:=StrAlloc(nLen);
try
pVar:=GetFIOPadeg(PChar(Fio),'','',Sex,3, pResult, nLen);
Edit3.Text:=pResult;
finally
StrDispose(pResult);
end;
end;
end;
initialization
DllHandle := LoadLibrary('padeg.dll');
FPadeg:=True;
if DllHandle <> 0 then
Begin
@GetFIOPadeg := GetProcAddress(DllHandle, 'GetFIOPadeg');
end
else
FPadeg:=False;
finalization
FreeLibrary(DllHandle);
end.
Вот в таком варианте без инициалов склонение происходит. Взял
отсюда вроде все правильно сделал а не работает.