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

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

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

ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

anfilat

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Antananarivu
Похоже ,в данном случае к моменту выполнения строки
if (Result[Length(Result)] in LWS)  
в Result пустая строка, вот и вылетает. Добавь дополнительную проверку. Правда я сам с Indy не работал, поэтому гарантировать правильность своей подсказки не могу.
 

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

В стандарте написано, что в любом месте, где может быть пробел, может быть перевод строки с несколькими последующими пробелами. Про то что первый пробел является исключением, ничего не написано. Значит все по стандарту!

Всего записей: 845 | Зарегистр. 12-08-2005 | Отправлено: 15:15 01-04-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не знаю насколько корректно вышел из положения: проверяю строку -> если пустая, ставлю туда пробел... пока вроде все работает...

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 16:15 01-04-2008
vserd

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

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

Indy в исходниках. Посмотри в отладчике где вылетает, может там действительно баг реализации. Быстрее уже сам бы пробежался по коду, чем дожидался ответа. Кроме того, у Indy есть группа новостей, попробуй там запостить свой баг.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 16:44 01-04-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну вот я и пробежался, нашел, поставил туда пробел и все заработало. Но если это баг Инди, где гарантия, что он не аукнется потом еще.

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 17:06 01-04-2008
vserd

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

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

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

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 17:56 01-04-2008
anfilat

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

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

Незачем, в Indy10 этого бага нет. Так что надо просто брать более последнюю версию
 
Добавлено:
Во всяком случае в той версии, что идет с D2005 эта функция выглядит по другому

Всего записей: 845 | Зарегистр. 12-08-2005 | Отправлено: 18:11 01-04-2008
Antananarivu

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Такой вопрос:
вот я разбираю письмо:

Код:
 
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;

Само письмо выглядит, например, так:

Код:
 
Message-ID: <22ed01c893ff$974a4670$66c8a8c0@nxl.nextline.ru>
From: =?utf-8?B?0JjRgNC40L3QsCDQnNCw0YLRg9GBIC0g0J3QtdC60YHRgi3Qm9Cw0LnQvQ==?= <irina@next-line.ru>
To: =?utf-8?B?KtCY0YDQuNC90LA=?= <zakaz@next-line.ru>
Subject: =?utf-8?B?Rnc6INGB0LLQuNGE0YI=?=
Date: Tue, 1 Apr 2008 17:52:14 +0400
MIME-Version: 1.0
Content-Type: multipart/mixed;
    boundary="----=_NextPart_000_22E9_01C89421.1E54BA80"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.3138
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3198
 
This is a multi-part message in MIME format.
 
------=_NextPart_000_22E9_01C89421.1E54BA80
Content-Type: multipart/alternative;
    boundary="----=_NextPart_001_22EA_01C89421.1E54BA80"
 
 
------=_NextPart_001_22EA_01C89421.1E54BA80
Content-Type: text/plain;
    charset="utf-8"
Content-Transfer-Encoding: quoted-printable
 
 
------=_NextPart_001_22EA_01C89421.1E54BA80
Content-Type: text/html;
    charset="utf-8"
Content-Transfer-Encoding: quoted-printable
 
=EF=BB=BF<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Dutf-8">
<META content=3D"MSHTML 6.00.2900.3268" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV>&nbsp;</DIV></BODY></HTML>
 
------=_NextPart_001_22EA_01C89421.1E54BA80--
 
------=_NextPart_000_22E9_01C89421.1E54BA80
Content-Type: application/pdf;
    name="12300(116).pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
    filename="12300(116).pdf"
 

Вопрос, как корректно разбить body на два файла: то есть, ту часть которая Content-Type: text/plain; сохранить как File.txt, а ту часть которая Content-Type: text/html; сохранить как File.html
Заранее огромное спасибо!

Всего записей: 151 | Зарегистр. 10-10-2006 | Отправлено: 10:24 02-04-2008
NOwlar



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не посоветуете хороший компонент для рисования графиков? Ну за исплючением TeeChart-а, конечно. Про него я знаю.

Всего записей: 170 | Зарегистр. 25-01-2006 | Отправлено: 17:27 02-04-2008
TohaDub



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сори. не туда задал вопрос.
Почитал по поиску, толком ничего не нашел.
Нужна вообщем компонента которая определяет железяку какую нить, и привязывается к ней, генерит один ключик. Далее юзверь пишет админу с указанием этого ключа, а админ грит ему ключ ответ для ввода вида "ХХХХХ-ХХХХХ-ХХХХХ-ХХХХХ-ХХХХХ".
Где то я видал такую компоненту, нооо это было давно, склероз.  

Всего записей: 372 | Зарегистр. 26-06-2007 | Отправлено: 09:14 03-04-2008 | Исправлено: TohaDub, 12:21 03-04-2008
Andrey128

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как преобразовать цвет в значение, которое выводится в шкале в правом верхнем углу развернутого полностью TColorDialog?

Всего записей: 410 | Зарегистр. 16-01-2003 | Отправлено: 16:04 03-04-2008
Dimoniusis



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TohaDub а написать самому? Я в свое время такие вещи сам писал...
 
Привязаться к любому номеру можно - на том же королевстве дельфи куча примеров считывания номеров винтов, и прочих девайсов...
 
Andrey128 если ты пр вертикальную шкалу - то это яркость. RGB2HSV [?] Тебя интересует параметр Val на выходе
 
Antananarivu ну ты же кодировки считываешь.... В той же строке и тип файла! Что мешает сделать функцию аля  

Код:
 
function GetFileExt(const ContentType: AnsiString): String;
begin
  Result='.bin';
  if pos('text/plain', ContentType)>0 then Result:='.txt';
  if pos('text/html', ContentType)>0 then Result:='.html';
end;
 

И сохранять

Код:
Memo1.Lines.SaveToFile(addr+inttostr(mailcicl)+GetFileExt(IdMessage.MessageParts.Items[intIndex].ContentType));

Кстати, а зачем считывать кодировку у бинарных файлов? ИМХО сначала надо прошерстить это тестовый файл или что, и если текстовый/html - то уже проверять на кодировку.

Всего записей: 4134 | Зарегистр. 18-10-2005 | Отправлено: 08:54 04-04-2008 | Исправлено: Dimoniusis, 08:58 04-04-2008
Andrey128

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

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

Нашел стандартную - ColorRGBToHLS.
Все равно спасибо!

Всего записей: 410 | Зарегистр. 16-01-2003 | Отправлено: 09:46 04-04-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет. Интересует получение строки с пункта меню. Код такой:
 

Код:
 
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.
 

 
Когда меню на самом диалоге, то все прекрасно работает. Когда создаю динамически при нажатии на правую кнопку мыши, то строка пустая. Но ведь если убрать DestroyMenu(MainMenu); то каждый раз будет создаваться меню и использоваться лишняя память. И еще на какой пункт бы не нажал, всегда в буфер копируется только строчка текста из первого пункта меню. Может надо MF_BYPOSITION использовать? Или какой-нибудь другой изврат...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 11:35 06-04-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не сталкивался с необходимостью определения кодировки текста (ANSI,UTF-8,Unicode) ?

Всего записей: 1731 | Зарегистр. 02-08-2003 | Отправлено: 15:37 06-04-2008
Vladimir_55



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
я такой штукой пользуюсь:
 
Toolbar2000 v2.1.4 + tbx-2_1-beta1 +темы разные (щас новее компоненты уже есть)
 
заменяет стандартное меню, и как то проблем ни с кодировкой, ни с пропадаением не возникало, плюс красиво выглядит. искать в гугле. у меня версии уже устарели.

Всего записей: 3 | Зарегистр. 06-04-2008 | Отправлено: 18:10 06-04-2008
Sampron

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

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

Или на сайте разработчика: http://www.jrsoftware.org/

Всего записей: 563 | Зарегистр. 06-01-2007 | Отправлено: 18:42 06-04-2008
mauar



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как открыть код компонента, для его изминения?

Всего записей: 134 | Зарегистр. 31-07-2006 | Отправлено: 18:51 06-04-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mauar
Если это компонент из VCL то никак, надо писать наследника. Если сторонний, то зажимаете Ctrl и клацаете мышкой на соотв. объект в редакторе кода. Должны попасть в модуль, где описан его класс. Но и в чужих компонентах рекомендую прямым редактированием не увлекаться.

Всего записей: 2322 | Зарегистр. 24-05-2007 | Отправлено: 19:54 06-04-2008
Erazer



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladimir_55
Как автоматически определить кодировку текста (ANSI/UTF-8/Unicode) ?
Проблема в том что никогда точно неизвестно в каком формате в программу приходит текст,никаких заголовков файлов типа EF BB BF / FE FF, нет т.к. нет файлов, есть просто строка текста в некой кодировке, и если она не в UTF-8 то ее нужно конвертировать в UTF-8, иначе оставить как есть.Лично мне по большому счету нужно определять UTF-8 это или нет, но вдруг у кого есть решения и по поводу Unicode и ANSI?  
Речь не идет о русском языке, интересует наиболее общий метод... Про IsTextUnicode я в курсе...

Всего записей: 1731 | Зарегистр. 02-08-2003 | Отправлено: 22:11 06-04-2008
xy



ХУдератор
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Erazer
кгхм.. простите за оффтоп.. а что такое Unicode, если это не UTF-8 (или там 7, 16 или 32) :-?

----------
Счастливые мысли приводят к счастливой клеточной биохимии

Всего записей: 10530 | Зарегистр. 28-05-2003 | Отправлено: 00:16 07-04-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 (все версии) - часть 3
ShIvADeSt (07-04-2008 02:27): продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=9383


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru