Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 3

Автор: anfilat
Дата сообщения: 01.04.2008 14:15
Antananarivu
Похоже ,в данном случае к моменту выполнения строки
if (Result[Length(Result)] in LWS)
в Result пустая строка, вот и вылетает. Добавь дополнительную проверку. Правда я сам с Indy не работал, поэтому гарантировать правильность своей подсказки не могу.


Цитата:
И кстати, почитал я стандарт, там вроде как описывается ситуация, что символ конца строки может стоять где-то посередине

В стандарте написано, что в любом месте, где может быть пробел, может быть перевод строки с несколькими последующими пробелами. Про то что первый пробел является исключением, ничего не написано. Значит все по стандарту!
Автор: Antananarivu
Дата сообщения: 01.04.2008 15:15
Не знаю насколько корректно вышел из положения: проверяю строку -> если пустая, ставлю туда пробел... пока вроде все работает...
Автор: vserd
Дата сообщения: 01.04.2008 15:44
Antananarivu

Цитата:
тогда что не так со стандартной функцией разбора заголовка? почему программа вылетает?

Indy в исходниках. Посмотри в отладчике где вылетает, может там действительно баг реализации. Быстрее уже сам бы пробежался по коду, чем дожидался ответа. Кроме того, у Indy есть группа новостей, попробуй там запостить свой баг.
Автор: Antananarivu
Дата сообщения: 01.04.2008 16:06
Ну вот я и пробежался, нашел, поставил туда пробел и все заработало. Но если это баг Инди, где гарантия, что он не аукнется потом еще.
Автор: vserd
Дата сообщения: 01.04.2008 16:56
Antananarivu

Цитата:
Но если это баг Инди, где гарантия, что он не аукнется потом еще.

отпишись разработчикам, они прояснят.
Автор: anfilat
Дата сообщения: 01.04.2008 17:11
vserd

Цитата:
отпишись разработчикам, они прояснят.

Незачем, в Indy10 этого бага нет. Так что надо просто брать более последнюю версию

Добавлено:
Во всяком случае в той версии, что идет с D2005 эта функция выглядит по другому
Автор: Antananarivu
Дата сообщения: 02.04.2008 09:24
Такой вопрос:
вот я разбираю письмо:

Код:
begin
if IdMessage.MessageParts.Items[intIndex].ClassType=TIdattachment then
begin
FN:= TIdAttachment(IdMessage.MessageParts.Items[intIndex]).Filename;
FN:=MailDeCode(FN);
FN:=AnsiUpperCase(FN);
Attach := IdMessage.MessageParts.Items[intIndex] as TIdAttachment ;
Attach.SaveToFile(addr+FN);
end;
if IdMessage.MessageParts.Items[intIndex].ClassType=TidText then
begin
For PartStr:=0 to TIdText(IdMessage.MessageParts.Items[IntIndex]).Body.Count-1 do
begin
s:=TIdText(IdMessage.MessageParts.Items[intIndex]).Body.Strings[PartStr];
if Pos('koi8-r', LowerCase(IdMessage.ContentType)) > 0 then s:=KoiToWin(s);
if Pos('multipart', LowerCase(IdMessage.ContentType)) > 0 then
begin
if Pos('koi8-r', LowerCase(IdMessage.MessageParts.Items[intIndex].ContentType)) > 0 then s:=KoiToWin(s);
end;
memo1.Lines.Add(s);
end;
Memo1.Lines.SaveToFile(addr+inttostr(mailcicl)+'.txt');
end;
end;
Автор: NOwlar
Дата сообщения: 02.04.2008 16:27
Не посоветуете хороший компонент для рисования графиков? Ну за исплючением TeeChart-а, конечно. Про него я знаю.
Автор: TohaDub
Дата сообщения: 03.04.2008 08:14
Сори. не туда задал вопрос.
Почитал по поиску, толком ничего не нашел.
Нужна вообщем компонента которая определяет железяку какую нить, и привязывается к ней, генерит один ключик. Далее юзверь пишет админу с указанием этого ключа, а админ грит ему ключ ответ для ввода вида "ХХХХХ-ХХХХХ-ХХХХХ-ХХХХХ-ХХХХХ".
Где то я видал такую компоненту, нооо это было давно, склероз.
Автор: Andrey128
Дата сообщения: 03.04.2008 15:04
Как преобразовать цвет в значение, которое выводится в шкале в правом верхнем углу развернутого полностью TColorDialog?
Автор: Dimoniusis
Дата сообщения: 04.04.2008 07:54
TohaDub а написать самому? Я в свое время такие вещи сам писал...

Привязаться к любому номеру можно - на том же королевстве дельфи куча примеров считывания номеров винтов, и прочих девайсов...

Andrey128 если ты пр вертикальную шкалу - то это яркость. [more=RGB2HSV]

Код: THSV = record
Hue, Sat, Val: Double;
end;

function RGB2HSV(R,G,B: Byte):THSV;
var
Min_, Max_, Delta : Double;
H , S , V : Double ;
begin
H := 0.0 ;
Min_ := Min(Min(R, G), B);
Max_ := Max(Max(R, G), B);
Delta := (Max_ - Min_);
V := Max_ ;
if ( Max_ <> 0.0 ) then
S := 255.0 * Delta / Max_
else
S := 0.0;
if (S <> 0.0) then
begin
If R = Max_ then
H := (G - B) / Delta
else
If G = Max_ then
H := 2.0 + (B - R) / Delta
else
If B = Max_ then
H := 4.0 + (R - G) / Delta
end
else
H := -1.0 ;
H := H * 60 ;
If H < 0.0 then H := H + 360.0;
with Result Do
begin
Hue := H ; // Hue -> 0..360
Sat := S * 100 / 255; // Saturation -> 0..100 %
Val := V * 100 / 255; // Value - > 0..100 %
end;
end;
Автор: Andrey128
Дата сообщения: 04.04.2008 08:46
Dimoniusis

Цитата:
Andrey128 если ты пр вертикальную шкалу - то это яркость. RGB2HSV Тебя интересует параметр Val на выходе

Нашел стандартную - ColorRGBToHLS.
Все равно спасибо!
Автор: Maks150988
Дата сообщения: 06.04.2008 10:35
Привет. Интересует получение строки с пункта меню. Код такой:


Код:
program example;

{$R example.res}

uses Windows, Messages;

const
DIALOG = 101;
MENU = 101;
LIST = 77;

var
hDlg : Integer;
MainMenu : HMENU;
CurPT : TPoint;
BufStr : array [0..255] of Char;

function DlgProc(hWnd : HWND; uMsg, wParam, lParam : Integer) : Integer; stdcall;
begin
Result := 0;
case uMsg of
WM_INITDIALOG : hDlg := hWnd;
WM_COMMAND :
begin
case wParam of
LIST :
begin
GetMenuString(MainMenu, LIST, BufStr, SizeOf(BufStr), MF_BYCOMMAND);
MessageBox(hDlg, BufStr, '', MB_OK);
end;
end;
end;
WM_RBUTTONDOWN :
begin
MainMenu := CreatePopupMenu;
AppendMenu(MainMenu, MF_ENABLED or MF_STRING, LIST, PChar('String1'));
AppendMenu(MainMenu, MF_SEPARATOR, 0, nil);
AppendMenu(MainMenu, MF_ENABLED or MF_STRING, LIST, PChar('String2'));
AppendMenu(MainMenu, MF_SEPARATOR, 0, nil);
AppendMenu(MainMenu, MF_ENABLED or MF_STRING, LIST, PChar('String3'));
SetForegroundWindow(hDlg);
GetCursorPos(CurPT);
TrackPopupMenu(MainMenu, TPM_LEFTALIGN or TPM_LEFTBUTTON, CurPT.x, CurPT.y, 0, hDlg, nil);
PostMessage(hDlg, WM_NULL, 0, 0);
DestroyMenu(MainMenu);
end;
WM_DESTROY, WM_CLOSE : PostQuitMessage(0);
end;
end;

begin
DialogBox(hInstance, PChar(DIALOG), 0, @DlgProc);
end.
Автор: Erazer
Дата сообщения: 06.04.2008 14:37
никто не сталкивался с необходимостью определения кодировки текста (ANSI,UTF-8,Unicode) ?
Автор: Vladimir_55
Дата сообщения: 06.04.2008 17:10
я такой штукой пользуюсь:

Toolbar2000 v2.1.4 + tbx-2_1-beta1 +темы разные (щас новее компоненты уже есть)

заменяет стандартное меню, и как то проблем ни с кодировкой, ни с пропадаением не возникало, плюс красиво выглядит. искать в гугле. у меня версии уже устарели.
Автор: Sampron
Дата сообщения: 06.04.2008 17:42
Vladimir_55

Цитата:
искать в гугле. у меня версии уже устарели.

Или на сайте разработчика: http://www.jrsoftware.org/
Автор: mauar
Дата сообщения: 06.04.2008 17:51
Как открыть код компонента, для его изминения?
Автор: Frodo_Torbins
Дата сообщения: 06.04.2008 18:54
mauar
Если это компонент из VCL то никак, надо писать наследника. Если сторонний, то зажимаете Ctrl и клацаете мышкой на соотв. объект в редакторе кода. Должны попасть в модуль, где описан его класс. Но и в чужих компонентах рекомендую прямым редактированием не увлекаться.
Автор: Erazer
Дата сообщения: 06.04.2008 21:11
Vladimir_55
Как автоматически определить кодировку текста (ANSI/UTF-8/Unicode) ?
Проблема в том что никогда точно неизвестно в каком формате в программу приходит текст,никаких заголовков файлов типа EF BB BF / FE FF, нет т.к. нет файлов, есть просто строка текста в некой кодировке, и если она не в UTF-8 то ее нужно конвертировать в UTF-8, иначе оставить как есть.Лично мне по большому счету нужно определять UTF-8 это или нет, но вдруг у кого есть решения и по поводу Unicode и ANSI?
Речь не идет о русском языке, интересует наиболее общий метод... Про IsTextUnicode я в курсе...
Автор: xy
Дата сообщения: 06.04.2008 23:16
Erazer
кгхм.. простите за оффтоп.. а что такое Unicode, если это не UTF-8 (или там 7, 16 или 32) :-?
Автор: Erazer
Дата сообщения: 07.04.2008 01:08
пасип за наводящий вопрос... дело в том что во всем интернете почему-то utf-8 противопостявляется слову unicode.. вот и я по привычке туда же - "все побежали и я побежал" хотя на самом деле : "Способы представления
Юникод имеет несколько форм представления (англ. Unicode Transformation Format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE)"
так вот... у меня проблема в том как определить что передо мной UTF-8 или UTF-16 (UTF-16BE, UTF-16LE)...
"Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. Byte Order Mark, BOM). Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов. Файлы, следующие этому соглашению, начинаются с таких последовательностей байтов:

UTF-8
EF BB BF
UTF-16BE
FE FF
UTF-16LE
FF FE
UTF-32BE
00 00 FE FF
UTF-32LE
FF FE 00 00

К сожалению, этот способ не позволяет надёжно различать UTF-16LE и UTF-32LE, поскольку символ U+0000 допускается Юникодом (хотя реальные тексты редко начинаются с него)."
эмпирическим путем я пришел к тому что так называемые unicode строки (ну так в программме их создающей написано ) начинаются с "FF FE" а UTF-8 -строки такого заголовка не имеют, и в принципе можно отличать их по этому признаку... но знаете лень как-то делать то что возможно кем-то уже реализовано Или все же еще никем ?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: 1С: Конвертация данных 2.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.