![]() |
|
|
Регистрация | << Правила форума >> | 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 под конкретную страну или какие установили при инсталляции.
я левша, но не всегда прав. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#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);
Естественно, в самом пакете тоже нужно процедуру с параметром объявить... |