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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
psa1974



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aidarsimon
Смотря какой кейген. Если кнопка генерации - оконный элемент управления, т.е. имеет дескриптор, то - можно: найти дескриптор главного окна кейгена, а потом дескриптор кнопки, послать ей сообщение BM_CLICK, потом найти элемент управления, куда он пишет сгенерированный ключ, послать ему сообщение WM_GETTEXT... Но вероятнее всего не получится задумка, потому что большинство кейгенов используют неоконные элементы управления для кнопок, соответственно с ними не получится взаимодействовать из другого процесса средствами WinApi...

----------
У программёра есть два состояния: "Втупляю" и "Попёрло"...

Всего записей: 438 | Зарегистр. 08-11-2005 | Отправлено: 10:35 21-01-2011
shurkis

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

Цитата:
JohnSilver182


Цитата:
Есть  разница в  какой  последоваельности делать  FREE ??  

 
В указанном примере, освобождать вручную экземпляры TADOConnection и TADOQquery не нужно, так как они были созданы с указанием владельца (Self), он и будет освобождать данные объекты.
В Вашем же примере, данные объекты будут освобождаться дважды - один раз вручную, второй раз из деструктора владельца.

Всего записей: 2 | Зарегистр. 24-06-2008 | Отправлено: 21:20 23-01-2011
emo

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

Цитата:
В Вашем же примере, данные объекты будут освобождаться дважды  

Мусье пишет чепуху.

Всего записей: 373 | Зарегистр. 19-11-2003 | Отправлено: 23:29 23-01-2011 | Исправлено: emo, 23:29 23-01-2011
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А я  подумал ,  если Функция  возвращает данные типа Record
 

Код:
type TFunctionResult = record
      Successful :boolean;
      MessageOnError:string;
end;

 

Код:
Function DropDatabase(const a_par:TjFib):TfunctionResult;
.....................
 

 
КАК ЭЛЕГАНТНО  проверить  Successful :boolean; и    MessageOnError:string;
что бы не вводить переменную
var  x:TFunctionResult
......................................
x:=DropDatabase......
if  x.Successful = false  then  
 
 
 
 

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 09:38 24-01-2011
Frodo_Torbins

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

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 10:16 24-01-2011
Eternal_Shield

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

Цитата:
КАК ЭЛЕГАНТНО  проверить  Successful :boolean; и    MessageOnError:string;  
что бы не вводить переменную  
var  x:TFunctionResult  
......................................  
x:=DropDatabase......  
if  x.Successful = false  then  

Однако...
 
А проверять как-нить вот так:

Код:
 
with DropDatabase(...) do
if Successful then...
 

 
что мешает ? =.=`  
 
 
А вообще, лучше возвращать какие-нибудь индексы ошибок, наподибии GetLastError и завести массив, словестно описывающий индексы ошибок. Структура со строчкой - плохая идея.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 10:16 24-01-2011 | Исправлено: Eternal_Shield, 10:25 24-01-2011
Frodo_Torbins

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

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 12:01 24-01-2011
lsferret

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
to Frodo_Torbins
Спасибо. Пока так и делаю. Хотя пока "боевые" проекты в Fulcrum далать не решился бы. Уж очень напрягает, что перехваченные исключения могут каким-то непонятным, магическим способом поврежать память других объектов. По правильному надо бы запостить вопрос Embarcadero, но боюсь не смогу грамотно описать довольно запутанную проблему в English.

Всего записей: 9 | Зарегистр. 29-07-2005 | Отправлено: 13:52 24-01-2011
shurkis

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

Цитата:
 
Цитата:
В Вашем же примере, данные объекты будут освобождаться дважды  
 
Мусье пишет чепуху.

Извините, был не прав, освобождаются один раз.

Всего записей: 2 | Зарегистр. 24-06-2008 | Отправлено: 22:59 24-01-2011
JohnSilver182



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

Цитата:
что мешает ? =.=`  
 
 
А вообще, лучше возвращать какие-нибудь индексы ошибок, наподибии GetLastError и завести массив, словестно описывающий индексы ошибок. Структура со строчкой - плохая идея.

 
Непонял  про  =.=

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 23:31 24-01-2011
Blind

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обнаружил абсурдный косяк. Если поместить TLabeledEdit поверх другого компонента (например, TPanel), то поле ввода окажется поверх, а лейбл - позади.
С TLabel такая же ерунда, но это "цельный" компонент. Когда же одна часть компонента поверх, а другая позади другого компонента - это нелепо.
 
Проявляется в D7, D2010, D2011.

Всего записей: 592 | Зарегистр. 06-10-2003 | Отправлено: 17:34 26-01-2011 | Исправлено: Blind, 17:35 26-01-2011
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Blind
Ничего удивительного. TEdit это оконный элемент управления, он может перекрывать другие окна (TPanel тоже окно). А вот TLabel - неоконный элемент, он всегда рисуется на своем родителе. В TLabeledEdit эти контролы просто склеены вместе, и продолжают рисоватся как обычно.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 18:07 26-01-2011
vez



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

Цитата:
Для моделирования ситуации нажать на форме кнопку 1, затем 2.
В качестве базы использвована DBDEMOS по пути С:\Program Files\Common Files\CodeGear Shared\Data.
Можно избежать AV, добавив вместо try/catch дополнительную проверку на открываемую таблицу или выкинуть нафиг JvGIFAnimator. Но терзает смутное сомнение, что в большом проекте вылезет бочина в  

 
Я добавил в строку проверку наличия поля Valid и всё пашет.
   if(dataset->FieldList->Text.Pos("Valid") && dataset->FieldByName("Valid")->AsInteger == 0)
 
Вообще-то в таких случаях надо проверять это, а бага наверняка в JEDI библиотеке.
 
Добавлено:
Кстати, сталкивался с подобными ошибками и в Билдере6, теперь работаю с ХЕ - основные инструменты.

Всего записей: 559 | Зарегистр. 02-06-2003 | Отправлено: 18:10 26-01-2011
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
Если возврат функций подразумевает что-то более серьёзное нежели True/False, то лучше возвращать инту. Например: 0 - успех, 1 - нет источника, 2 - неверный формат и т.п.
 
И, удобнее всего, оформить возврат функции в виде неиндексированного енума. Типа:

Код:
 
TFunctionResult  = (trSuccess, trNoSource, trInvalidFormat);
 

 
А по-скольку вам ещё и описалово надо, то константный массив типа:

Код:
 
const
  FunctionResultStrings:  
    array[TFunctionResult]of string=(
    'Успешно',
    'Нет источника',
    'Неверный формат'
    );
 

 
решит это проблему. и всяческие проверки станут сверх элегантными и красивыми...и "говорящими".
 
Собсна это  я и имеел ввиду, когда грил, что делать надо на подобии GetLastError.
 
Имхо, такой подход очень удобный и не имеет минусов.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 22:02 26-01-2011 | Исправлено: Eternal_Shield, 22:03 26-01-2011
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield
Интересно , только вот  если надо  само сообщение об ошибке....
 

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 22:39 26-01-2011
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JohnSilver182
Как вариант хранить глобальную переменную LastErrorText или структуру с болле расшыренными параметрами.

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 00:12 27-01-2011
Eternal_Shield

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

Цитата:
Интересно , только вот  если надо  само сообщение об ошибке....

Без доп. переменной всё-равно не обойтись ... ну или совсем извратиться и использовать анонимный подход:
исходная функа  

Код:
 
Function DropDatabase(const a_par:TjFib):TfunctionResult;
 

сделать так:

Код:
 
type
  TFunctionResult = record
    Successful: Boolean;
    MessageOnError: String;
  end;
  TFuncResProc = reference to procedure (const Result: TFunctionResult);
 
procedure DropDatabase(const a_par: TjFib; const P: TFuncResProc);
 

 
тогда проверки будут такого вида:

Код:
 
  DropDatabase(что-то, procedure (const R: TFunctionResult)
  begin
    if not R.Successful then
      ShowMessage(R.MessageOnError);
  end);
 

 
но, имхо, нефиг городить огород на ровном месте. Используйте доп. переменную и всё.
 
Добавлено:
tanaseduard
Если проект многопоточный, с глобальной фигнёй начнутся проблемы. себе дороже будет.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 14:16 27-01-2011 | Исправлено: Eternal_Shield, 14:20 27-01-2011
Samotek

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

Цитата:
Интересно , только вот  если надо  само сообщение об ошибке....  

А чего не вернуть сообщение об ошибке? А если ее нет - пустую стоку?

Всего записей: 2432 | Зарегистр. 18-05-2005 | Отправлено: 15:05 27-01-2011
JohnSilver182



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Samotek - шаман !

Всего записей: 829 | Зарегистр. 03-06-2009 | Отправлено: 15:12 27-01-2011
Samotek

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

Цитата:
Samotek - шаман !  

Это хорошо или плохо?

Всего записей: 2432 | Зарегистр. 18-05-2005 | Отправлено: 15:17 27-01-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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