![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Код:
if TryStrToFloat(LabeledEdit1.Text,unit1.stk) then Выдаёт ошибку: there is no overloaded version of 'trystrtofloat' that can be called with these arguments |
|
#2
|
||||
|
||||
|
Код:
var f: Double; begin TryStrToFloat(Edit1.Text, f); end; |
|
#3
|
||||
|
||||
|
Помогло. А не подскажете почему? Что double что real поддерживают 15 знаков (в их описании отличий нет)
|
|
#4
|
||||
|
||||
|
потому что:
Цитата:
|
|
#5
|
||||
|
||||
|
Спасибо за ответ.
Чтобы не делать новой темы и не сильно думать ещё спрошу. В double для разделения целой и дробной части используется точка? Как реализовать автозамену запятой на точку? (Или наоборот, если запятая) |
|
#6
|
||||
|
||||
|
Цитата:
Если при вводе/выводе, то используется тот символ, который настроен у тебя в Windows (в региональных настройках). В программе можно использовать переменную DecimalSeparator. Пример: Код:
procedure TForm1.ButtonClick(Sender: TObject); begin ShowMessage(FloatToStr(1.234)); DecimalSeparator := '*'; ShowMessage(FloatToStr(1.234)); end; |
|
#7
|
||||
|
||||
|
poli-smen, что Вы имеете ввиду под регионом windows? Отчего он может зависеть? Пока прогу использую только я, но, может быть, будет кто-нибудь ещё.
Про сепаратор: То есть я перед TryStrToFloat должен вставить DecimalSeparator:='.'? И тогда делитель всегда будет точка? |
|
#8
|
||||
|
||||
|
Имеется в виду настройки разделителя в Windows под конкретную страну или какие установили при инсталляции.
я левша, но не всегда прав. |
|
#9
|
||||
|
||||
|
Ну у большинства будут российские параметры всё равно.
|
|
#10
|
||||
|
||||
|
Цитата:
Цитата:
|
|
#11
|
|||
|
|||
|
Решил не создавать новую тему, проблема тоже с передачей параметра в функцию. Задача такая:
Есть bpl пакет: Код:
unit ULogin;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBClient, Provider, ADODB, UDataModule;
type
TFLogin = class(TForm)
Edit_EmployeeId: TEdit;
Edit_EmployeePass: TEdit;
Label_EmployeeId: TLabel;
Label_EmployeePass: TLabel;
BtnOK: TButton;
Btn_Close: TButton;
procedure BtnOKClick(Sender: TObject);
procedure Btn_CloseClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
procedure ExecuteModal;
function FamilyName: string;
function PluginName: string;
implementation
{$R *.dfm}
.....
procedure ExecuteModal;
var
FLogin:TFLogin;
begin
FLogin:= TFLogin.Create(Application);
FLogin.Hide;
FLogin.Showmodal;
end;
exports
ExecuteModal;
end.из главной формы по нажатию кнопки вызывается процедура, расположенная в DataModule, из которой вызывается запуск и загрузка bpl пакета: Код:
unit UDataModule;
interface
uses
Windows, Messages, SysUtils,Classes,Dialogs, DB, ADODB, IniFiles;
type
TExecuteModal = procedure;
TDM = class(TDataModule)
Query: TADOQuery;
DataSet: TADODataSet;
procedure DataModuleCreate(Sender: TObject);
private
public
end;
procedure LoadPlugin(PlName:String; H:HWND; Par:string);
const
MY_MESSAGE = WM_USER + 1;
var
DM: TDM;
ParentHandle:HWND;
implementation
{$R *.dfm}
.....
//---------------------------ЗАГРУЗКА ПЛАГИНА
procedure LoadPlugin(PlName:String; H:HWND; Par:string);
var
Plugin : HModule;
FamilyName : TFamilyName;
PluginName : TPluginName;
ExecuteModal : TExecuteModal;
ServerPath,
ServerPluginPath,
LocalPluginPath,
PluginFileName:string;
MyIniFile:TInifile;
begin
//Получаем путь к серверу из файла настроек
MyIniFile := TIniFile.Create(GetCurrentDir+'\cfg.ini');
ServerPath := MyIniFile.ReadString('General', 'ServerPath', 'not found');
MyIniFile.Free;
ServerPluginPath:=ServerPath+PlName+'.bpl';
LocalPluginPath:=GetCurrentDir+'\'+PlName+'.bpl';
PluginFileName:=PlName+'.bpl';
//Пробуем обновить с сервера
if not CopyFile(PChar(ServerPluginPath), PChar(LocalPluginPath), false) then
begin
showmessage('Не получилось обновить '+PluginFileName+' с сервера');
end;
//Ищем в папке с программой
if FileSearch(PChar(PluginFileName), GetCurrentDir)='' then
begin
showmessage('Локальная копия '+PluginFileName+' не найдена');
//Если модуль логина не найден - закрываем всю программу
if PlName='Login' then SendMessage(ParentHandle, WM_DESTROY, 0,0); //FMain.Close;
end;
//Пробуем загрузить плагин в память
try
Plugin := LoadPackage(PluginFileName);
except
showmessage('Ошибка загрузки '+PluginFileName+' в память');
//Если модуль логина невозможно загрузить - закрываем всю программу
If PlName='Login' then SendMessage(ParentHandle, WM_DESTROY, 0,0); //FMain.Close;
end;
//Если плагин загружен, пытаемся найти функции и процедуры
if Plugin <> 0 then
try
@FamilyName := GetProcAddress(Plugin,'FamilyName');
@PluginName := GetProcAddress(Plugin,'PluginName');
@ExecuteModal := GetProcAddress(Plugin,'ExecuteModal');
except
ShowMessage ('Невозможно найти процедуры и функции плагина '+PluginFileName);
end;
//Если процедуры и функции найдены, проверяем его версию и принадлежность к программе
if Assigned(FamilyName) then
begin
if (FamilyName<>'TPMDocs') then
begin
Showmessage('Ошибка 01. Левый плагин '+PLName); //Плагин не принадлежит TPMDocs
UnloadPackage(Plugin);
If PlName='Login' then SendMessage(ParentHandle, WM_DESTROY, 0,0); //FMain.Close;
end;
end;
If Assigned(PluginName) then
begin
if (PluginName<>PlName) then
begin
Showmessage('Ошибка 02. Левый плагин '+PLName); //Имя плагина не соответствует имени файлв
UnloadPackage(Plugin);
If PlName='Login' then SendMessage(ParentHandle, WM_DESTROY, 0,0); //FMain.Close;
end;
end;
if Assigned(ExecuteModal) then
begin
ParentHandle:=H;
msgtochild:=txtmsg;
ExecuteModal;
end;
end;
end.Вопрос - как в ExecuteModal передать параметр? хотел сделать так: ExecuteModal(Par:string), но в DataModule не понятно где это параметр объявлять. В разделе type не понятно как объявить, там только TExecuteModal = procedure; Как в модуле DataModule объявить процедуру с параметром? В самом модуле с этим проблем не возникло.... Последний раз редактировалось sorockinalex, 05.09.2012 в 11:06. |
|
#12
|
|||
|
|||
|
Разобрался. Просто в дата модуле нужно вверху в объявлении сделать так: TExecuteModal = procedure (Par:string);
Естественно, в самом пакете тоже нужно процедуру с параметром объявить... |