Нужна помощь

Alekc2008

Premium
Регистрация
30 Май 2007
Сообщения
16
Реакции
12
Credits
129
Помогите с CoolDev CoolControls v3.04h

Нужно исправить этот компонент, чтобы от работал в BDS 2006.

Заранее благодарен.

Исходники сдесь Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование модератором:

delphiwin2007

Местный
Регистрация
4 Окт 2008
Сообщения
76
Реакции
427
Credits
148

Night_Cruiser

Местный
Регистрация
6 Дек 2005
Сообщения
135
Реакции
15
Credits
50
Не хочу заводить новую тему.

Такая ситуация:
Модернизирую одну программу, написанную на Дельфи. С готовой программой можно работать (вводить и получать данные) только, если установлено, чтобы нецелые значения вводились через ТОЧКУ (т.е. "3.27", "5.64"). Но если в самой операционной системе указано, что "основной" является запятая (т.е. ""3,27", "5,64""), то программа выдает ошибку и нету возможности работать с ней дальше.

Пожалуйста, подскажите, что мне нужно изменить (или добавить) в коде программы, чтобы работать с запятой? Т.е. с тем символом, который "прописан" в Виндовс.

Я работаю в Дельфи 2009.
 
Последнее редактирование модератором:

asm64d

Местный
Регистрация
14 Июн 2008
Сообщения
940
Реакции
9,672
Credits
0
Код:
var
  FormatSettings:TFormatSettings;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=FloatToStr(152.201,FormatSettings);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings (GetThreadLocale, FormatSettings);
  // FormatSettings.DecimalSeparator := '.'; 
  // можно вручную установить разделитель, 
  // если не трогать этот параметр, то используется 
  // разделитель по умолчанию (который в системе установлен)
  // (т.е. в вашем случае запятая)
end;


P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);
 
Последнее редактирование модератором:

Night_Cruiser

Местный
Регистрация
6 Дек 2005
Сообщения
135
Реакции
15
Credits
50
P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);

Нет, не в курсе. Сейчас начну разбираться. Если не получится, надеюсь, найду здесь совет, как это сделать.
 

Night_Cruiser

Местный
Регистрация
6 Дек 2005
Сообщения
135
Реакции
15
Credits
50
asm64d,

Программа достаточно большая (около 30к строк кода)..
Что я сделал: Ввел переменную: "FormatSettings:TFormatSettings;"
Вписал в процедуру создания главное формы " GetLocaleFormatSettings (GetThreadLocale, FormatSettings);".

Но все тоже самое, т.е.:
при компиляции пишет следующее:
C:\directory\example.pas(2394,9): warning W1019: For loop control variable must be simple local variable

(и так несколько десятков строк).

Все же запускает программу, сразу же выдавая ошибку: '0.3' is not a valid floating point value.

Где "0.3", как раз первая цифра с точкой, которая заведомо введена в окно программы (эдакие стартовые данные).


Я так понимаю, что я должен ввести в каждые текстовые поля процедур "Button1Click(Sender: TObject);" код "Edit1.Text:=FloatToStr(152.201,FormatSettings);"?

НО! Этих полей "EditХХ.Text:" превеликое множество.

Не сможете ли вы разъяснить, как работает упомянутая вами "перезагрузка"? (Ведь думаю, что именно она мне и нужна"..

В этом ли загвоздка?
 

asm64d

Местный
Регистрация
14 Июн 2008
Сообщения
940
Реакции
9,672
Credits
0
Код:
var
  FormatSettings:TFormatSettings;

//--------------------------------------------------
// перегружаем, функция с тем же именем
function FloatToStr(Value: Extended): string;
begin
result:=SysUtils.FloatToStr(Value,FormatSettings);
end;
//--------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:=FloatToStr(152.201); 
// Теперь будет вызвана наша функция
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings (GetThreadLocale, FormatSettings);
end;
 

Ognev

ex-Team DUMPz
Местный
Регистрация
20 Авг 2004
Сообщения
2,079
Реакции
908
Credits
0
Можно в программе на onCreate переопределить DecimalSeparator на нужный.

Можно еще повесить на onKeyPress того Edit-а, куда вбиваются данные, обработку точки и запятой - переопределяя Key на нужное значение.

Честно сказать - не знаю какие из способов, озвученные здесь, более правильные с точки зрения программирования.
 
Последнее редактирование модератором:

Night_Cruiser

Местный
Регистрация
6 Дек 2005
Сообщения
135
Реакции
15
Credits
50
Не получилось "перезагрузить"..
Принял решение, просто вводить данные через запятую. Спасибо за помощь.

Но возникла другая проблемка.
Установил TMS Component pack v5.0.4.0 Mar 21, 2009. Установил нормально, следуя интсрукции.
Далее, при открытии демо файлов (с примерами) или при создании своего примера с использованием установленных компонентов, возникает ошибка:

[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'AdvMenus.dcu'
[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'AdvGlassButton.dcu'


Какой-бы компонент я не использовал, появляются надписи, аналогичные выше.

Надписи стали появляться, даже когда я использую обычные "стандартные" меню.
Т.е., они прописываются в начале кода программы "AdvMenus", "AdvGlassButton" и т.п. И, чтобы избежать появления ошибок, их приходится удалять из кода программы вручную..


Что делать?

Или только удалять установленные компоненты?
 

asm64d

Местный
Регистрация
14 Июн 2008
Сообщения
940
Реакции
9,672
Credits
0
Для просмотра ссылки Войди или Зарегистрируйся

Это на примере D7, в D2007 и D2009 по аналогии.

P.S. Для увеличения картинки щелкнуть по ней.
 
Последнее редактирование модератором:

Night_Cruiser

Местный
Регистрация
6 Дек 2005
Сообщения
135
Реакции
15
Credits
50
Еще вопросик. :)

Нужно решить следующую задачу (в Delphy): построить конструкцию по принципу лото (в 2d), т.е., банально - круг, контур которого размыкается снизу, образуя "проход" для шариков, которые, попадая в него, выкатываются и заполняют позиции.
Круг вращается, с центром посередине и имеет выступы (полный аналог лото!).
Т.е., учавствуют в такого роде движения 3 тела: круг, примыкающий к нему "проход" и группа шариков.

Прошу дать совет - какие компоненты использовать при создании данной конструкции, чтобы заставить ее работать? Формулы движения (вся кинематика) есть. Интересует конкретно графическая часть, т.е., чем задать для шариков граничащие условия (стенки круга, стенки прохода, позиции)..