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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 102 103 104 105 106 107 108 109 110 111

Открыть новую тему     Написать ответ в эту тему

data man



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаем новые возможности и баги
Просьба писать только про Delphi 2009 и выше - по остальным версиям есть соответствующая тема.
Вопросы вареза здесь не обсуждаются !!!
См. также:
Известные важные баги Delphi 2010:

Описание________________________________________________ Исправлено Решение/Альтернатива_____________________
  1. Внимание !  Деинсталляция D2010 нарушает работу D2007 и D2009 !  
При деинсталляции удаляются CC3280MT.DLL и CC3290MT.DLL из Windows\System32,   необходимые для работы D2007 и D2009 соответственно.
Сделайте резервные копии
  2. Code Formatter не работает, если не инсталлирован пакет моделирования.   В нем также присутствует множество багов. Используйте с осторожностью.   1.   JEDI CodeFormat 2.44 SVN Snapshot (~750Kb)   Требуются JCL и JVCL  
2.GExperts with Formatter
  3. Не работает F1 в Object Inspector Update 2   IDEFixPack 2.9 от Andreas Hausladen
(dev. snapshots)
  4. Если IDE начинает падать с сообщением "Out of resources", возможно, что поврежден .res файл проекта. Удалить его, запустить IDE, открыть проект - новый .res файл будет создан автоматически.
  5. В редакторе не работает Class Completion, если в декларируемом классе есть поля с шаблонами. Перед декларированием поля добавить public или private и т.д.
  6. TTrayIcon.ShowBalloonHint() не работает на ОС ниже Vista [QC 77561] Update 2 * Установить Update 2   * ИЛИ почитать о причинах и решении проблемы на форуме embarcadero и в QC   * ИЛИ воспользоваться альтернативой, например Cooltray 4.4.0
  ...      


Всего записей: 1696 | Зарегистр. 13-10-2005 | Отправлено: 14:28 26-08-2009 | Исправлено: data man, 18:27 06-08-2010
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
В этом-то и вопрос: что эффективней индекс или ссылка?
Если судить по исходникам Xml.XMLDoc.pas (в нём во всех методах First, Next и т.п. вызывается IndexOf), то индексы. Но TXML тоже ли самое, что IXML?
 
Добавлено:
Вернее так: TXML тоже ли самое, что стоит за IXML?

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 16:53 26-09-2012 | Исправлено: AlexCoRu, 16:56 26-09-2012
adasiko



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

Код:
try
Stream1:=TMemoryStream.Create;
Операции разные;
finally
Stream1.Free;
End;
Ну и показывается понятный ворнинг «stream1 might not have been initialized». А как эту конструкцию максимально корректно и правильно написать?

Всего записей: 1807 | Зарегистр. 30-06-2008 | Отправлено: 11:02 27-09-2012
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
adasiko
Обычно, пишут так:

Код:
 
  Stream1:=TMemoryStream.Create;  
  try  
    Операции разные;  
  finally  
    Stream1.Free;  
  end;
 

или так:

Код:
 
  with TMemoryStream.Create do
    try  
      Операции разные;  
    finally  
      Free;  
    end;
 

 
з.ы: когда уже появится нормальная подсветка кода на этом форуме?!

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 11:23 27-09-2012 | Исправлено: Eternal_Shield, 11:24 27-09-2012
adasiko



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield
Но так ведь тож не хорошо. Если памяти нет- ну или вообще просто create выполнится с ошибкой?

Всего записей: 1807 | Зарегистр. 30-06-2008 | Отправлено: 11:54 27-09-2012 | Исправлено: adasiko, 11:55 27-09-2012
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
adasiko
Create выполнится без проблем, ибо это чистый инициализатор. Захват памяти под данные потока будет тогда, когда будет конкретный Write. До Write никаких захватов нет.
 
Если же в Create произойдёт AV, то объект не будет создан, поэтому и обрабатывать его уничтожение не надо, обработать надо будет только AV. Это относится к любому классу.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 10:56 28-09-2012 | Исправлено: Eternal_Shield, 10:58 28-09-2012
eddoc



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

Цитата:
Но так ведь тож не хорошо. Если памяти нет- ну или вообще просто create выполнится с ошибкой?

Что за ерунду вы несете? Мат.часть не знаете?  
 
Если хотите отловить ошибку или просто не желаете ее видеть, вставьте try..except..end между try..finally. Это ж в любом букваре есть.

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 11:59 28-09-2012
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть задача, необходимо добиться правильного отображения кириллицы.
 
procedure TForm1.Button1Click(Sender: TObject);
var s: WideString;
    s1: AnsiString;
    PAC, PAC1: PAnsiChar;
begin
  s := #197#181;
  s1 := #197#181;
  PAC := StrAlloc(2);
  PAC1 := StrAlloc(2);
  try
   PAC[0] := AnsiChar(s[1]);
   PAC[1] := AnsiChar(s[2]);
   PAC1[0] := AnsiChar(s1[1]);
   PAC1[1] := AnsiChar(s1[2]);
   ShowMessage('Правильно   ' + PAC);
   ShowMessage('Не правильно   ' + PAC1);
  finally
   StrDispose(PAC);
   StrDispose(PAC1);
  end;
 
  s := '§С';
  s1 := '§С';
  PAC := StrAlloc(2);
  PAC1 := StrAlloc(2);
  try
   PAC[0] := AnsiChar(s[1]);
   PAC[1] := AnsiChar(s[2]);
   PAC1[0] := AnsiChar(s1[1]);
   PAC1[1] := AnsiChar(s1[2]);
   ShowMessage('Не правильно   ' + PAC);
   ShowMessage('Правильно   ' + PAC1);
  finally
   StrDispose(PAC);
   StrDispose(PAC1);
  end;
end;
 
Для корректного отображения символов юникода необходимо чтобы входная строка была WideString, "PAC" и "PAC1" обязательно PAnsiChar.
Вот и получается, в первой части если "s" WideString то всё правильно, но во второй части (здесь русская "С") "s"  на выходе не даёт "§С".
 
Подскажите что исправить чтобы на выходе корректно отображались символы юникода и кириллица?
(с юникодом сталкиваюсь крайне редко...)

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 12:36 28-09-2012 | Исправлено: Aleksandr N, 12:47 28-09-2012
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
adasiko
Цитата:
Если памяти нет- ну или вообще просто create выполнится с ошибкой?
Тогда Free будет вызван автоматически. А ваш вариант приведет к двойному Free.
 
Aleksandr N
Эм, один юникодный символ занимает минимум 2 байта. Ансишный символ занимает всего один байт. Как вы собираетесь втиснуть первое во второе?
Без потерь можно преобразовать только те юникодные символы, которые поддерживает кодировка целевой ансишной строки.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 23:39 28-09-2012
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Про два и один символ я знаю, вот я и пытаюсь придумать как отделить кириллицу от другого. В общем после всего этого пойдёт перекодировка. Первая строка перекодируется в символ "诺", а вторая в русскую "а". Если для кириллицы и литиницы дастаточно чтобы входная строка была "AnsiString", то китайские символы трубуют юникода. Вот и надо как-то отделить всё это. Может есть какой-то способ...
Если как-то возможно сделать, могу выложить конкретный пример с требуемой задачей.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 23:53 28-09-2012
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как-то так вышло, что до сей поры не приходилось сталкиваться с регулярными выражениями  
А тут встала задача выделить из строки вида  

Код:
Продаю 1-комн. кв новый дом, 2,3,4,5,6 /6 эт нов. кир. дома , площадью 34,0 кв. м , 35,4 кв. м 37 ,0 кв. м 44,5 кв. м 2-х ком. 50,49,59кв. м по 24кв. м, 3-х ком. 85,0 кв. имеется лифт. Цена 830,0 тыс. руб тел. 41-16-94, 8-962-441-1694
номера телефонов. Подозреваю, что это легко делается с помощью TRegEx и TMatchCollection, однако, не соображу как написать шаблон для поиска... Помогите, плиз.
 
PS Причем городской номер также может встречаться в виде "411-694", а сотовый - как "+7-962-441-16-94"

Всего записей: 3698 | Зарегистр. 19-04-2005 | Отправлено: 11:54 02-10-2012 | Исправлено: relictus, 11:58 02-10-2012
eddoc



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

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 12:25 02-10-2012
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
тут быстрее ответят. у мня получилось
Код:
//PCRE
 [+]?\d?[-\s]?\d{2,4}[\s-]?\d{2,4}[\s-]?\d{0,4}[\s-]?\d{0,2}
проверил суперпрогой, ссылка на которую есть в той теме.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 13:01 02-10-2012
relictus

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
eddoc
"Обрезка" не получится, т.к. слово "тел" не всегда присутствует, да и сами номера телефонов не всегда заканчивают текст объявления.
neznayka3
Спасибо за линк.  
А этот шаблон подходит для всех видов записи номера телефона?

Всего записей: 3698 | Зарегистр. 19-04-2005 | Отправлено: 13:12 02-10-2012
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
relictus
для тех, что описаны да
   
картинку залил, уж программа очень нравится) многим пригодится
 
upd программа может сама код сгенерить для delphi

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 13:22 02-10-2012 | Исправлено: neznayka3, 13:33 02-10-2012
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
Можно использовать WideCharToMultiByte, нужно будет только указать целевую кодировку с нужным набором символов. К примеру для кириллицы это будет 1251. Все символы не входящие в ее набор будут заменены знаками вопроса.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 17:50 02-10-2012
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Можно конечно, но знаки вопроса меня не устраивают.
Оказывается я изначально поставил вопрос не правильно. Для начала, может как-то можно определьть является ли входная строка WideString или AnsiString? Именно строки а не файла. Юникодовский файл начинается с символов FEFF, но явно юникодовская строка этого не содержит (проверял). Может как-то получится отличить эти строки. Кстати в блокноте AkelPad это как-то делается, когда создаёшь чистый лист, вставляешь юникодовскую строку и пытаешься сохранить как Ansi, а он предупреждает о возможной потере символов.
Так как-то можно?

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 20:20 02-10-2012
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Aleksandr N
Если нужно определить влезет ли содержимое текущей юникодной строки в данную кодировку, то это не сложно. Просто проверяем коды символов в строке.
Что касается загрузки файлов без BOM, то я думаю в акеле определение кодировки делается статистически. То есть стопроцентной гарантии нету. Аналогичное апи экспортирует IE. Вроде бы кто-то из русскоязычных блогеров даже писал об этом.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 00:02 03-10-2012
Aleksandr N

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Наверное да, придется проверять коды символов, по другому не получится.
Спасибо.

Всего записей: 1665 | Зарегистр. 25-02-2008 | Отправлено: 00:23 03-10-2012
MagistrAnatol



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
народ помогите с idFtp в c++builder xe2  
 DirectoryListing возвращает 0 каталогов - порылся в нете  
 надо  
 
Код: #include <IdFTPListParseBase.hpp>  
 #include <IdFTPListParseUnix.hpp>  
   
 // Где-то нужно зарегистрировать парсер. Утверждается, что это надо запустить  
 // после того, как главное окно сконструировано. Я не заморачивался и воткнул пока  
 // в точку начала работы с FTP. В итоге оно вызывается несколько раз, но  
 // проблем от этого нет. Имя класса TIdFTPLPUnix нашёл в файле  
 // IdFTPListParseUnix.hpp - это я к тому, что если потребуются другие типы парсеров,  
 // то как их искать  
 RegisterFTPListParser ( __classid (TIdFTPLPUnix));  
   
 IdFTP->Username = ...;  
 ...  
 IdFTP->List (NULL, "", true);  
 // Здесь IdFTP->DirectoryListing->Count уже работает  
 
 
 но в результате получаю ошибку  
 [ILINK32 Error] Error: Unresolved external '__fastcall Idftplistparsebase::RegisterFTPListParser(const System::TMetaClass * const)' referenced from D:\...\_FRMMAIN.OBJ

Всего записей: 2120 | Зарегистр. 09-04-2003 | Отправлено: 10:57 03-10-2012
eddoc



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

Цитата:
 программа может сама код сгенерить для delphi

Шо, даже купил?
 
А где-нить триалки нету, чтоб пощупать?

Всего записей: 328 | Зарегистр. 25-11-2007 | Отправлено: 15:38 03-10-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 102 103 104 105 106 107 108 109 110 111

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru