Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может ли кто объяснить, почему в Delphi 7 получается разный результат в выражениях:
 
S1:=FormatFloat('#0.00',8.925);
S2:=FormatCurr('#0.00',8.925);

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 15:21 02-07-2008
Granmer



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Bill_PHO

Цитата:
S1:=FormatFloat('#0.00',8.925);
- используется арифметическое округление (5 - в большую сторону)

Цитата:
S2:=FormatCurr('#0.00',8.925);
- используется т.н. банковское округление (к ближайшему четному)
 

Всего записей: 236 | Зарегистр. 20-08-2003 | Отправлено: 17:01 02-07-2008
Bill_PHO

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Granmer
Спасибо, однако.
А это документировано где-нибудь?
Что-то я не находил.

Всего записей: 287 | Зарегистр. 15-08-2003 | Отправлено: 18:33 02-07-2008
Kilich



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Granmer
спасибо - я тоже нигде не встречал в доках!

Всего записей: 267 | Зарегистр. 18-09-2006 | Отправлено: 00:06 03-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins greenpc
Спасибо, разобрался. Если можно следующий вопрос. =)
Есть:
 BgCol: TLabel;
 BgCol.Color: TColor;
 PCol: ^TColor;
Пытаюсь:
 PCol := @BgCol.Color;
 PCol^ := Desktop.Pixels[Point.X, Point.Y]; //Это точка на экране.
Получилось:
 FgCol.Color = {к-либо цвет: Cardinal};
 А визуально цвет лейбла не изменился. Почему?

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 02:19 03-07-2008
Granmer



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Bill_PHO
Kilich
Работаю с учетными ИС, поэтому столкнулся в своё время. А в хелпе скорее всего было, хотя я в инете искал инфу об этом.

Всего записей: 236 | Зарегистр. 20-08-2003 | Отправлено: 09:05 03-07-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
В общем, ето неправильно - получат ссылку на property. Неизвестно, что получиш - в зависимости есть ли етого property Read- и Write- методы - ссылку на метод или на свойство...
Измените алгоритм.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:35 03-07-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG
Зачем такая странная конструкция?
Делайте или напрямую: BgCol.Color := Desktop.Pixels[Point.X, Point.Y]. Или тогда переменную заводите MyColor: TColor.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 10:10 03-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mandor Sawall
Я, как вы поняли, в этом не совсем разбираюсь, но меня удивило что свойство BgCol.Color установилось как надо, я его могу прочитать, но визуально это не отразилось. То есть осталось заставить BgCol перечитать свои свойства, это возможно?
 
Frodo_Torbins
Я еще не знаю какому из лейблов менять цвет. Т.е.
PCol := @BgCol.Color; и PCol^ := Desktop.Pixels[Point.X, Point.Y]; находятся в разных процедурах. Причем вызываются именно в этом порядке.
Ничего более умного, чем указатели в голову не пришло.

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 16:15 03-07-2008 | Исправлено: ASE_DAG, 16:18 03-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кстати, да. Если заставить "перечитать" свойства конструкцией BgCol.Hide; BgCol.Show; отображает как надо.
Но решилось проще, т. Mandor Sawall был прав, поставил указатель на BgCol - стало работать нормально.


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 19:32 03-07-2008
Dimoniusis



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ASE_DAG можно просто попросить сделать invalidate

Всего записей: 4134 | Зарегистр. 18-10-2005 | Отправлено: 20:58 03-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dimoniusis
Извиняюсь, не понял...

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 00:38 04-07-2008
Vityarik



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
 
BgCol.Invalidate

Всего записей: 1 | Зарегистр. 11-06-2008 | Отправлено: 08:25 04-07-2008
LavriKLAVRIKOV

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите люди добрые!!! Надо написать программу для приема и обработки данных от нескольких внешних устройств подключеных через FTDI (FT232BM). Обязательно через FT_W32... функции. Причем прем должен быть строгим, без потерь. А через  FT_W32_ClearCommError не получается, слишком медленно. Кто-нить что подобное делал? Где поискать примеры??? На офицальном сайте FTDI ничего нет. АбЫдно...

Всего записей: 1 | Зарегистр. 01-07-2008 | Отправлено: 08:33 04-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ASE_DAG
У нас на фирме за такой код пинают ногами. Правильно делать надо не так.
Надо в процедуру передавать переменную типа TLabel и не заниматся ерундой. И всё будет хорошо. А то что ты делаешь - просто грязный хак и без понимания, как оно там внутри работает - не стоит даже пытаться.
И не надо будет удивляться, если такие методы будут работать например на 7 делфи и перестанут на 2007 - вполне обычная ситуация.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 13:50 04-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Да, ладно, говорю же, что я не программист... Так что меня пинать ногами не будут. =)
Но как ее передать в процедуру, поэтому не понимаю:
Код:
 
{Сокращено}
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (ssCtrl in Shift) and (Key = 192) then begin
   PCol^.Color := Desktop.Pixels[Point.X, Point.Y];
end;
end;
 
procedure TMainForm.BgColClick(Sender: TObject);
begin
PCol := @BgCol;
end;


----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:10 04-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
вместо pcol  будем использоватать переменную типа TLabel (не надо бояться, это уже указатель).
и код будет таким

Код:
var mLab:TLabel;

там, где устанавливается нужная метка

Код:
mLab := Label1;

там, где надо использовать

Код:
mLab.color ;= Desktop.Pixels[Point.X, Point.Y];

вызывать конструктор для mLab, а тем более деструктор, не надо. при присваивании вида mLab := Label1; копирования объекта не происходит. просто создаётся псевдоним.
Но далеко был бы не помехой код инициализации вида
mLab  := nil;
И при попытке использования метки код оформить так

Код:
if mLab<>nil then mLab.color ;= Desktop.Pixels[Point.X, Point.Y];



----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:20 04-07-2008
ASE_DAG



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
копирования объекта не происходит. просто создаётся псевдоним.

Вот, этого не знал, спасибо. Пошел переписывать. =)

----------
Dmitry Alexandrov <321942@gmail.com> [PGP] [BTC]

Всего записей: 9272 | Зарегистр. 12-05-2005 | Отправлено: 17:34 04-07-2008
Dimoniusis



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim красивее не  
 
if mLab<>nil then  
 
а  
 
if Assigned(mLab) then  
 
А при закрытии формы
 
mLab:=nil; // чтобы даже и не пыталась разрушить

Всего записей: 4134 | Зарегистр. 18-10-2005 | Отправлено: 17:44 04-07-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Dimoniusis
дело вкуса.
а при закрытии формы не надо так делать. точнее не обязательно в данном случае. Делфи не будет вставлять код для разрушения глобальной переменной (я бы лучше сделал mLab приватным полем формы. Это бы решило кучу проблем и было просто красиво. В случае, если форма создается динамически и может быть создана не одна, а несколько - это уже обязательно надо делать полем формы.).
Но вот по коду такую вставку можно делать. и в таким нехитрым образом проверять, выбранна ли какая-нибудь метка.
to ASE_DAG
кстати, можно свободно будет обращаться и к другим свойствам выбранной метки. в некоторых случаях используя этот приём вместе с свойством Tag/Name можно творить чудеса.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 17:53 04-07-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru