Подскажите функцию, пожалуйста!

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Подскажите функцию, пожалуйста!

Сообщение Troublemaker » 23.05.2008 21:53:58

Attid писал(а):вариант с тильдой =)

Остряк-самоучка! :)
SAK писал(а):((x shr 1) shl 1)

Вот это: ((x shr 1) shl 1) выполняется двумя ассемблерными командами, если глупый компилятор не "соптимизирует" это в nop.
это: x and 1 по идее - тоже двумя, а может и одной, сильно зависит от...
а вот это: not odd(x) при таком исходнике:
Код: Выделить всё
function odd(l:longint):boolean;{$ifdef SYSTEMINLINE}inline;{$endif}
begin
   odd:=boolean(l and 1);
end;
займет несколько больше как по размеру, так и по времени выполнения. Лень ковыряться - тайпкастинг делается, как я понимаю, в рантайме, а значит уже не самый эффективный прием. (ну, кроме тех случаев, когда без него действительно не обойтись)

Вариант с x and 1 мне нравится больше моего, спасибо за подсказку, воспользусь. Аналогично получается if x OR 1=x.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Подскажите функцию, пожалуйста!

Сообщение Sergei I. Gorelkin » 23.05.2008 22:12:31

Так речь все-таки об обычном тексте или путях к файлам?
Когда речь идет об путях файловой системы, действительно, принято выгрызать середину. Но - по папкам (т.е. участками между двумя "\").
Виндовая ф-ция DrawText позволяет различать эти два случая, ей можно давать флаги DT_ELLIPSIS и DT_PATHELLIPSIS. Аналогичные ей велосипеды для путей должны называться ShortenPath или около того.

Но для себя, если мне нужно вывести длинный путь в поле с ограниченной длиной, использую TEdit, которому ставлю ReadOnly=True и Color=clButtonFace, опционально BorderStyle=bsNone. При этом вид получается как у TLabel, но текст можно прокрутить вправо-влево, выделить и скопировать в буфер.

Troublemaker писал(а):это: x and 1 по идее - тоже двумя, а может и одной, сильно зависит от...

Компилятор не такой уж и тупой, на самом-то деле. Во всяком случае, деление и mod со степенями двойки он умеет менять на битовые операции.
Результат всегда можно проверить, скомпилировав с ключами -a -al.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Подскажите функцию, пожалуйста!

Сообщение Troublemaker » 23.05.2008 22:35:12

Sergei I. Gorelkin писал(а):Компилятор не такой уж и тупой

:) Достопочтенный тёзка готов поручиться за ВСЕ компиляторы языка Паскаль? :D
Sergei I. Gorelkin писал(а):Так речь все-таки об обычном тексте или путях к файлам?
Не принципиально. Меня интересовал сам принцип сокращения строк
Sergei I. Gorelkin писал(а):BorderStyle=bsNone
использую tLabeledEdit, там такого свойства не наблюдается, хотя, наверное, в рантайме можно менять.
Меня в edit-ах другой вопрос волнует - как правильно отслеживать изменения, помимо OnChange, которое дергается на каждый "чих". OnEditingDone не опубликовано в потомках TControl-a (или где там оно впервые появляется), и не понятно, как именно оно наследуется.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Re: Подскажите функцию, пожалуйста!

Сообщение Sergei I. Gorelkin » 25.05.2008 01:05:46

Troublemaker писал(а):Достопочтенный тёзка готов поручиться за ВСЕ компиляторы языка Паскаль?


За все, конечно, не поручусь (я даже названий их ВСЕХ не знаю), но за FPC и Дельфи поручиться могу :)

Troublemaker писал(а):Меня в edit-ах другой вопрос волнует - как правильно отслеживать изменения, помимо OnChange, которое дергается на каждый "чих".

Свойство modified не подойдет? Проверять - по нажатию кнопки OK в диалоге, например. Или в обработчике Edit.OnExit.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Подскажите функцию, пожалуйста!

Сообщение Troublemaker » 25.05.2008 18:16:32

Sergei I. Gorelkin писал(а):modified не подойдет?

Подойдет, спасибо.
Аватара пользователя
Troublemaker
постоялец
 
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток

Пред.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru