unsigned GetLowestBitPos(unsigned value)
{
if (value & 1) return 1;
if (value & 2) return 2;
if (value & 4) return 3;
if (value & 8) return 4;
if (value & 16) return 5;
if (value & 32) return 6;
if (value & 64) return 7;
if (value & 128) return 8;
if (value & 256) return 9;
if (value & 512) return 10;
if (value & 1024) return 11;
if (value & 2048) return 12;
if (value & 4096) return 13;
if (value & 8192) return 14;
if (value & 16384) return 15;
if (value & 32768) return 16;
if (value & 65536) return 17;
if (value & 131072) return 18;
if (value & 262144) return 19;
if (value & 524288) return 20;
if (value & 1048576) return 21;
if (value & 2097152) return 22;
if (value & 4194304) return 23;
if (value & 8388608) return 24;
if (value & 16777216) return 25;
if (value & 33554432) return 26;
if (value & 67108864) return 27;
if (value & 134217728) return 28;
if (value & 268435456) return 29;
if (value & 536870912) return 30;
return 31;
}
50% всех чисел вернутся в первую строку кода.
75% всех чисел вернутся к первым двум строкам кода.
87 % всех чисел вернется в первых трех строках кода.
94% всех чисел вернутся в первых 4 строках кода.
97% всех чисел вернутся в первых 5 строках кода.
и т. д.
Я думаю, что люди, жалующиеся на то, как неэффективный худший сценарий для этого кода не понимают, насколько редко это условие произойдет .
Прочитайте следующие статьи на веб-сайте Indy, они объясняют правильный способ заполнения TIdMesaage
для HTML:
Все зависит от того, сколько разных удаленных почтовых клиентов вы сможете поддерживать. Я считаю, что известные библиотеки Delphi, поддерживающие SMTP / Mime, будут выполнять разумную работу, но они могут оставить вам проблемы с поддержкой, когда один из ваших почтовых пользователей обнаруживает, что их получатель не может видеть правильно отформатированное электронное письмо.
Я рекомендую посетить сайт Jacob Palme , который даст вам представление о некоторых проблемах, с которыми вы можете столкнуться. Возможно, это немного устарело, но в целом, однако вы создаете и отправляете сложную электронную почту MIME, вы столкнетесь с одним или несколькими почтовыми клиентами, которые не могут правильно обработать синтаксис. На сайте также есть ссылки на некоторые полезные примеры конструкций, которые вы можете проверить и проверить.
Я не хочу подразумевать, что вам нужно сворачивать свою собственную логику так же, как и мы: хорошее упакованное решение, вероятно, будет успех в подавляющем большинстве случаев. Мы писали наш собственный код Delphi, чтобы справиться с этим несколько лет назад, поэтому я оставлю его другим, чтобы предоставить вам самую последнюю информацию о том, что сейчас находится на полке.
В эти дни я использую почтовый клиент Clever Component, хотя и не бесплатный.
Элементы управления TurboPower Internet (OpenSource) отлично работали для меня в прошлом.
Мы пробовали этот год назад с Indy и встроенным cid: изображения вроде этого: https://forums.codegear.com/thread.jspa?threadID=17473
Мы никогда не получал его стабильным, каждый раз, когда был еще один почтовый читатель, который был заблокирован (если мы его работаем в Outlook, то Thunderbird не принимал его, или Outlook Express, или, и т. д. и т. д.).
В в конце мы сделали это с .NET, используя AspNetEmail , и он работал как шарм.
- jeroen
function data64 (const filename: string): ansistring; // использует классы, IdGlobalProtocols, EncdDecd; const crlf = # 13 # 10; begin result: = ''; с TIdMimeTable.Create попытаться получить результат: = 'data:' + GetFileMIMEType (filename) + ';'; наконец, свободным; конец; с TMemoryStream.Create, попробуйте LoadFromFile (имя файла); result: = result + 'base64,' + crlf + EncodeBase64 (память, размер); наконец, свободным; конец; конец;