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

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

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

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

   

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:52 20-04-2006 | Исправлено: ShIvADeSt, 02:02 30-06-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
OrlangurStep
Что значит созданные? Если выделял память (New, GetMem или создавал объекты), то освободить ее надо обязательно, если просто присваивал им какие-то адреса, то в nil можно не сбрасывать

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 23:55 19-10-2006
minos14

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В компоненте Edit или MaskEdit нужно вводить целые числа справа налево. Каждый вновь введенный символ должен сдвигать предыдущий влево. При этом известно максимальное количество символов в поле, изначально там должны стоять нули - как шаблон в MaskEdit. Может кто подскажет как это реализовать.

Всего записей: 26 | Зарегистр. 08-09-2005 | Отправлено: 00:13 20-10-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
minos14
Кидаешь на форму TEdit, устанавливаешь ReadOnly = True, в Text забиваешь нужное количество нулей, в обработчик OnKeyPress пишешь:
Код:
  if (Key in ['0'..'9']) and (Edit1.Text[1] = '0') then  
    Edit1.Text := Copy(Edit1.Text, 2, Length(Edit1.Text) - 1) + Key
  else if Key = #8 then
    Edit1.Text := '0' + Copy(Edit1.Text, 1, Length(Edit1.Text) - 1);
  Edit1.SelStart := Length(Edit1.Text);


Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 07:47 20-10-2006
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
в TMS можно сразу загрузить
(LoadCSV)
 и разложить по столбцам файл
а потом одним циклом прогнать проверку

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 08:04 20-10-2006 | Исправлено: greenpc, 08:11 20-10-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
greenpc
А толку? Тот же самый цикл с добавлением итемов:  
while not Eof(f)... lis := Self.Items.Add... lis.SubItems.Add...  
какая разница кто его написал - тормоза в самом ListView, а не в способе чтения файла (ну если не читать посимвольно: текстовый файл на 8М читается через read 1350 мс, через readln 350 мс, через TStringList 40 мс)

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 09:39 20-10-2006
vserd

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

Цитата:
 всегда и везде я менял %temp% на d:\temp а тут забыл голова садовая... как только поменял и перегрузил комп все так сразу и поставилось. Еще раз благодарю.  
ЗЫ на буржуйских форумах тема подымалась не раз но нигде ни одного вразумительного ответа про TEMP никто не написал, не буду и я писать - в лом

Это стандартная ошибка инсталяторов InstallShield, да и другие грешили этим.
На счет не писать... Это зря. Вопрос то FAQ-овский :)
cryptonium
так какие вопросы по DUnit?

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:08 20-10-2006
cryptonium

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vserd
вопросов по нему самому в общем-то нет, поигравшись на тестовых примерчиках - протестировал его работу.
но вот в рабочий проект интегрировать не получается. Проблема в том что проект построен из пакетов (bpl) соответственно само исполняемое приложение только загружает стартовый пакет, помимо того связи между разными модулями приложения могут организовываться как привязкой, так и динамическими вызовами. И вот на текущий момент реализовать тестирование не удалось - хотелось пойти наимение трудоемкими путями - и пока везде я получаю access violation - найти какое-то упоминание о использовании dunit в такой ситуации не удалось. Если у кого-то есть подобный опыт или может подсказать идею - был бы премного благодарен - к тестам привык и тяжеловато уже без них - сам подумываю уже о том чтобы написать загрузчик под них.
да, dunit из bds 2006

Всего записей: 193 | Зарегистр. 11-01-2003 | Отправлено: 11:55 20-10-2006
minos14

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RomanTim
Спасибо за ответ!
Только небольшая проблема - весь текст в Edit сдвинут к левому краю, а желательно,
чтобы к правому. Как это реализовать?

Всего записей: 26 | Зарегистр. 08-09-2005 | Отправлено: 20:47 20-10-2006
RomanTim

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
minos14
Можно взять какой-нибудь навороченный едит - например TAdvEdit от TMS
Если нужно просто сделать правое выравнивание, то можно так (сперто из того же TAdvEdit ) - создаешь наследника от TEdit, у него объявляешь  
  protected procedure CreateParams(var Params: TCreateParams); override;
и в ней пишешь
  inherited;
  Params.Style := Params.Style and not (ES_LEFT or ES_CENTER) or ES_RIGHT;
Потом или создаешь динамически экземпляры этого едита или можешь его завернуть в компонент и установить в среду

Всего записей: 375 | Зарегистр. 11-09-2003 | Отправлено: 23:09 20-10-2006 | Исправлено: RomanTim, 23:10 20-10-2006
OrlangurStep



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Larry
Про то и спрашиваю критично ли это. Ведь по идее все не глобальные переменные после выполнения процедуры уничтожаются.

Всего записей: 1392 | Зарегистр. 08-04-2006 | Отправлено: 08:02 21-10-2006
SERGE_BLIZNUK

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

Цитата:
спрашиваю критично ли это. Ведь по идее все не глобальные переменные после выполнения процедуры уничтожаются.

вы только не путайте переменные и объекты. Под переменные выделяется место в стеке, после завершения процедуры стек очищается. А вот если вы создаете объект: myobject1 := TMyObject.Create или New() или выделяете память := GetMem... нужно чистить за собой ОБЯЗАТЕЛЬНО! - иначе и будут те самые утечки памяти...

Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 08:47 21-10-2006
FireZone

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OrlangurStep
Каждому New должен соответствовать свой Dispose (хоть в той же процедуре, хоть в любой другой, главное, чтобы другая имела доступ к указателю на память, выделенную тем New). Аналогично, каждому GetMem должен соответствовать свой FreeMem, каждому Create свой Free. Другими словами, память, выделенная руками в некоторой процедуре, автоматически не освобождается при выходе из этой процедуры. А вот доступ к этой памяти можно и потерять, если указатели на выделяемую память были объявлены локально и никуда наружу не присваивались. Вот иллюстрация:
Код:
var g_ptr: Pointer = nil;
procedure Test1;
var loc_ptr, loc_ptr1: Pointer;
begin
  if g_ptr = nil then begin
    GetMem(loc_ptr, 10);
    g_ptr := loc_ptr;
  end;
  loc_ptr := nil; // совершенно лишняя операция в данном случае
  GetMem(loc_ptr1, 10);  //доступ к этой памяти мы потеряем и не сможем её освободить
end;
 
procedure Test2;
begin
  if g_ptr <> nil then begin
    FreeMem(g_ptr);
    g_ptr := nil //если не очистим указатель, появится шанс нарваться на повторный FreeMem, что приведёт к ошибке
  end
end;

Всего записей: 293 | Зарегистр. 28-01-2004 | Отправлено: 12:45 21-10-2006
OrlangurStep



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FireZone, SERGE_BLIZNUK
Понял. И еще один вопрос как изменить содержимое ячейки в базе данных? ( Конкретно Access)

Всего записей: 1392 | Зарегистр. 08-04-2006 | Отправлено: 16:04 21-10-2006
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уже задавал вопрос о ListView, вроде решение нашли. Теперь такая проблема. Есть
алгоритм, заполняющий ListView
Так вот, при большом файле он работает очень медленно. Есть какие-либо способы ускорения работы ListView, помимо BeginUpdate? Желательно именно к этому алгоритму.

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 16:48 22-10-2006 | Исправлено: Jokerjar, 16:49 22-10-2006
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использовать AllocBy перед тем как добавлять большое кол-во элементов.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 20:46 22-10-2006
bornbill



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ есть маленький вопросец.....
есть переменная spr:TStrings....
Так вот когда я пытаюсь начать сней работать....
spr.clear
spr.addstrings
Я получаю Access violation......
Может кто знает что надо добавить чтобы заработало
При компиляуии всё чисто варнингов и ошибок нет...
Заранее благодарен....

Всего записей: 1440 | Зарегистр. 02-04-2004 | Отправлено: 11:36 23-10-2006
vshersh



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bornbill
Напиши код, как ты его юзаешь...
Ато, как говорицца - телепаты в отпуске

Всего записей: 506 | Зарегистр. 12-01-2006 | Отправлено: 11:39 23-10-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Jokerjar
Есть такие алгоритмы. Добавляют - закачаешся.
Сам тестировал на днях - называется "виртуальный ListView". Добавление 5000 записей - доли секунды.
Почему тормозит добавление? Потому что при добавлении происходит много перераспределений памяти. Но неприятно другое, то что в памяти храниться двойная копия данных.  
Как зделать "виртуальный ListView".
Первым долгом нужно "придумать" функцию, которая по номеру элемента в ListView могла выдать его содержимое. В самом просттом случае - это просто массив записей.
Теперь для ListView изменяем свойство OwnerData на true. Вторым действием будет установка ListView.items.Count равным фактическому количеству элементов (это делается на момент, когда ты данные загрузил и знаеш сколько их)
И последнее, написать обработчик OnData. Здесь передаётся параметр Item, который тебе через свойство index скажет свой номер, а через Caption SubItems.addd('') ты должен заполнить первый и другие столбцы. Этот обработчик будет "дёргаться" по мере того, как ListView будут нада данные для отображения. Сам опыт не ставил, но мне кажеться, что даром он его не дёргает. Надо элемент прорисовать - "дёрнул".
Согласно MSDN элементов в списке может быть на DWORD - а это 2 в 32 - десятизначное число - хватит с головой.
 
Добавлено:
bornbill
А о абстрактных класах тебе не расказывали? Используй TStringList и будет счастье

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:42 23-10-2006
bornbill



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В начале объявленно
Var spr:Tstrings;
Её естественно и передаю в качестве параметра....
 
Читать дальше..
 
А о абстрактных методах.....
как тебе сказать я касаюсь программирования поскольку постольку, и чаще всего той минимальной памяти и знаний мне хватает....

Всего записей: 1440 | Зарегистр. 02-04-2004 | Отправлено: 11:46 23-10-2006 | Исправлено: bornbill, 11:57 23-10-2006
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bornbill
А передаётся в процедуру валидный объект типа TStrins?
переделай строчку с ошибкой так

Код:
 
if (str=nil) or (not Assigned(str)) then ShowMessage('Караул!, объект не передан');
str.clear
 


----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:52 23-10-2006
   

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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru