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

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

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mcka
Так string - это и есть указатель. Разве что детали работы с ним несколько спрятаны. А по сути - именно так.
Вот если Вы будете в рекорде использовать короткую строку, например - string[50], то проблем с утечками у Вас вовсе не будет. Потому что менеджер памяти будет обладать всей информацией, необходимой для корректной работы.
Что касается пустого проекта - при его завершении освобождается вся память. Чохом...
Опять же, при освобождении формы - счетчики ссылок уменьшаются, память освобождается.
Почитайте, например, вот эту статью
 
Добавлено...
Разница в ваших двух примерах в том, что в первом случае Вы освобождаете память через обезличенный указатель, напрямую через Dispose(FList[I]). Попробуйте вначале переменной типа PLabelElement (например - PLE) присвоить эту FList[I]. А уже потом вызвать Dispose(PLE). Утечки исчезнут. Именно из-за того, что в этом случае менеджер памяти будет осведомлен о наличии в записи строки, с которой ему нужно разбираться особо. А иначе - он тупо освобождает только указатель на строку, без освобождения содержимого строки.
Кстати, может отсюда и "Unknown x 1" лезет?

Всего записей: 467 | Зарегистр. 12-02-2003 | Отправлено: 12:10 29-06-2011 | Исправлено: JAPWork, 17:56 29-06-2011
mcka

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
JAPWork, Изменил:
Код:
procedure TTextArea.Clear;
var
  i: Integer;
begin
  for i := 0 to FTagElements.Count-1 do
      Dispose(PTagElement(FTagElements.Items[ i ]));
  FTagElements.Clear;
 
  for i := 0 to FLabelElements.Count-1 do
    Dispose(PLabelElement(FLabelElements.Items[ i ]));
  FLabelElements.Clear;
end;
 

Так тоже утечек нет - логично и правильно. Спасибо!
 

Всего записей: 65 | Зарегистр. 04-09-2007 | Отправлено: 09:53 30-06-2011 | Исправлено: mcka, 11:09 30-06-2011
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть проблемка.  
Создал компонент от TcxGroupBox. Переопределил Create так как внутри него создаю Parented форму.
Проблема в том что когда я пытаюсь этот компонент положить на любой контейнер на форме(GroupBox, ScrollBox etc..) он создается не в контейнере а на форме (форма является владельцем), потом конечно его можно переместить на контейнер но интересует причина почему при создании он не создается в контейнере на котором указываешь мышкой.
Код конструктора.

Код:
 
TxePdCustomGroupBox=Class(TcxGroupBox)
  Constructor Create(AOwner:TComponent); Override;
{============================================}
Constructor TxePdCustomGroupBox.Create(AOwner:TComponent);
Begin
 Inherited;
 Parent:=TWinControl(AOwner);
 FCustomForm:=TfmCustomMessengers.CreateParented(Self.Handle);
 FCustomForm.ManualDock(TWinControl(Self));
 FCustomForm.Align:=alclient;
 FCustomForm.Enabled:=Not(csDesigning In Owner.ComponentState);
 FCustomForm.Show;
End;
 

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 18:23 05-07-2011
plyasunov

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

Код:
Constructor TxePdCustomGroupBox.Create(AOwner:TComponent);
Begin
 Inherited;
 FCustomForm:=TfmCustomMessengers.Create(nil);
 FCustomForm.Parent := Self;
 FCustomForm.Align:=alclient;
 FCustomForm.Enabled:=Not(csDesigning In Owner.ComponentState);
 FCustomForm.Show;
End;
 

А так не получается что-ли? Или я не понял чуть вопроса...

Всего записей: 3 | Зарегистр. 20-12-2005 | Отправлено: 21:58 06-07-2011
Samotek

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tanaseduard
вот так у меня работает
constructor T_fmSPForm.CreateDocking(AOwner: TComponent; Host: TWinControl; AlignOnHost: TAlign = alClient);
begin
  Create(AOwner);
  self.ManualDock(Host);
  Align := AlignOnHost;
end;
 

Всего записей: 2446 | Зарегистр. 18-05-2005 | Отправлено: 10:07 07-07-2011
tanaseduard



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
plyasunov
 
В таком случае форма не будет внутри созданого GroupBOX
 
Добавлено:
Samotek
Спасибо, попробую.
CreateDocking это свой метод или переопределенный?

Всего записей: 518 | Зарегистр. 21-11-2009 | Отправлено: 10:08 07-07-2011
Samotek

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

Цитата:
CreateDocking это свой метод или переопределенный?

Мой:
    constructor CreateDocking(AOwner: TComponent; Host: TWinControl; AlignOnHost:TAlign = alClient); virtual;

Всего записей: 2446 | Зарегистр. 18-05-2005 | Отправлено: 12:53 07-07-2011
31010

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Появилась проблемка с RAD studio. На одном компе (домашнем) проект компилируется, запускается и работает все как надо. На другом компе (рабочем)  тот же проект компилируется, запускается и вылетает ошибка: Invalid folder path. Не могу понять, в чем причина. Прошу помощи!
Расположение проекта и на первом и втором компе одинаковое. (D:\проект). В проекте используется работа с INI-файлами. Сам ini расположен тоже внутри (D:\проект...)
Уже переустанавливал RAD studio с чисткой реестра, ProgrammFiles и Documents and Settings. Результат тот же самый. Но при первом запуске переустановленный RAD не просил регистрацию, т.е. удалилось не все.
Получается, что сам проект непричём.
Поставил RAD еще на один комп - проект отлично работает.
Может кто помочь? И подсказать либо как ПОЛНОСТЬЮ удалить RAD studio для установки с "нуля", либо что сделать с установленным RAD?

Всего записей: 12 | Зарегистр. 07-06-2010 | Отправлено: 14:27 07-07-2011 | Исправлено: 31010, 14:31 07-07-2011
vez



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А название папки по русски? Может здесь засада?

Всего записей: 561 | Зарегистр. 02-06-2003 | Отправлено: 14:35 07-07-2011
31010

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vez
Так на другом компе все тоже самое и на третьем тоже!
 
Опа! На третьем компе загрузил проект еще раз и тоже "Invalid folder path"
 
На втором переместил проект в другую папку без русских буковок - тоже самое - Invalid...

Всего записей: 12 | Зарегистр. 07-06-2010 | Отправлено: 14:38 07-07-2011 | Исправлено: 31010, 14:43 07-07-2011
spasius



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
31010
у обеих студий library path одинаковый? используются ли компоненты для доступа к СУБД?

Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 14:42 07-07-2011
V1s1ter



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

Цитата:
На другом компе (рабочем)  тот же проект компилируется, запускается и вылетает ошибка: Invalid folder path. Не могу понять, в чем причина. Прошу помощи!

Так локализуй место вылета и смотри что там. Может студия и не причем. Если откопилилось и запустилось, то найди ошибку. Может так статься, то ошибка в коде программы, а вылетает из-за благоприятных условий именно на этом компе. На Вашем месте я бы предварительно убедился, что виновата именно Делфи, а не Ваша программа. Для этого у Вас есть все необходимое. И возможно относится к проблеме нудно так "как хорошо, что можно на этом компе выловить еще один баг моей программы!"

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 14:45 07-07-2011
31010

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spasius
Без СУБД. library path одинаковый.
 
Добавлено:
V1s1ter
Для меня это еще сложно, наверно. Вылетает на сколько я понял на создании формы - вот здесь
 

Код:
 
public:
    /* TCustomForm.Create */ inline __fastcall virtual TForm(Classes::TComponent* AOwner) : TCustomForm(AOwner) { }
    /* TCustomForm.CreateNew */ inline __fastcall virtual TForm(Classes::TComponent* AOwner, int Dummy) : TCustomForm(AOwner, Dummy) { }
    /* TCustomForm.Destroy */ inline __fastcall virtual ~TForm(void) { }
 

 
И что мне посоветуете сделать дальше?

Всего записей: 12 | Зарегистр. 07-06-2010 | Отправлено: 14:49 07-07-2011 | Исправлено: 31010, 15:10 07-07-2011
spasius



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
31010
смотри что есть в этих событиях формы (OnCreate ...)

Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 15:19 07-07-2011
31010

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spasius
Натолкнул меня на правильный путь! Спасибо! У меня  в AdvExplorerTreeview1->FolderPath был неправильный путь! Всем спасибо и извините за беспокойство! Месяц над проектом не работал и ... вот такая вот байда!

Всего записей: 12 | Зарегистр. 07-06-2010 | Отправлено: 15:39 07-07-2011
volod3000



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день .
Возникла маленькая проблема, не пойму как решить.
Пробую, до момента создания формы, из ресурса извлечь файл.  
Извлечь файл нужно обязательно до создание формы  
 
Почему ни чего не происходит .
 
Делаю так :
 
 

Код:
 
{$R dll.RES}
 
 
 
//=================  Редактор ресурсов  
 
procedure ExtractRes(ResType, ResName, ResNewName : String);
var Res : TResourceStream;
begin
  Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
  Res.SavetoFile(ResNewName);
  FreeAndNil(Res);
  FreeMemory(Res);
end;
 
begin
 
     CreateDir('C:\ProgramData\dll');
     ExtractRes('RES', 'ba', 'C:\ProgramData\dll\my.dll');
     Sleep(1000);
 
     Application.Initialize;
     Application.MainFormOnTaskbar := True;
     Application.CreateForm(TForm1, Form1);
     Application.Run;
 
end;
 

Всего записей: 134 | Зарегистр. 03-04-2007 | Отправлено: 15:54 07-07-2011
V1s1ter



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

Цитата:
из ресурса извлечь файл.


Цитата:
 Res.SavetoFile(ResNewName);  

Так извлечь или сохранить?

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 17:29 07-07-2011
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volod3000
Зачем FreeMemory после FreeAndNil? FreeAndNil освобождает объект и обnilиливает указатель. Вызывать FreeMemory для nil - это, по крайней мере, не очень интересное занятие. Удалите уже этот насчастный FreeMemory.
 
И вообще, лучше любую работу с TResourceStream заключать в try..except..end; секцию. Здоровее будете.

Всего записей: 766 | Зарегистр. 18-05-2009 | Отправлено: 23:29 07-07-2011 | Исправлено: Eternal_Shield, 23:31 07-07-2011
AlexIntegral



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему Delphi может использовать функцию POS без модуля System.pas?

Всего записей: 245 | Зарегистр. 31-05-2008 | Отправлено: 00:00 08-07-2011
spasius



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

Всего записей: 695 | Зарегистр. 16-03-2009 | Отправлено: 00:30 08-07-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