Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 245
от 21.09.2005, 23:25

Администратор:Калашников О.А.
В рассылке:Подписчиков: 246, Экспертов: 47
В номере:Вопросов: 3, Ответов: 17


Вопрос № 26432: Здравствуйте! У меня такой вопрос. Я использую TStringGrid. Размер его у меня может достигать нескольких десятков или сотен тысяч строк. Когда я его уменьшаю через StringGrid1.Lines.Count=xxx, то размер памяти, занимаемый этими данным...
Вопрос № 26436: А можно ли поворачивать шейп??? Так чтоб квадрат стал ромбом. Кроме шейпа есть ли что то подобное??? Нужны очень ромбики или на крайний случай треугольники (может компонент какой есть?). С рисованием неохота связываться. И картинка ...
Вопрос № 26460: Напомните пож.что нужно написать чтобы при нажатии кнопки на клаве вниз возникало событие?...

Вопрос № 26.432
Здравствуйте!
У меня такой вопрос. Я использую TStringGrid. Размер его у меня может
достигать нескольких десятков или сотен тысяч строк. Когда я его
уменьшаю через StringGrid1.Lines.Count=xxx, то размер памяти,
занимаемый этими данным, все равно не уменьшается.
Как освободить лишнюю память? Или я что-то не так делаю?
Отправлен: 16.09.2005, 09:43
Вопрос задал: TR da Alien (статус: 1-ый класс)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: sir henry
Здравствуйте, TR da Alien!
Почему Lines?
Попробуйте уменьшить RowCount.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 16.09.2005, 10:01

Отвечает: Boriss
Здравствуйте, TR da Alien!
StringGrid1.Lines ? Чейто не то, написали, наверно. Или у Вас не 7-ой Delphi :)) или не TStringGrid
Но а так, принципиально, изменение числа count еще не влечет за собой изменение числа строк. Так что нужно строки ненужные очищать. Искать и очищать методом Clear:
StringGrid1.Rows[i].Clear

---------
Прорвемся! (Быть может :(( )
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 16.09.2005, 10:17

Отвечает: Jadd
Здравствуйте, TR da Alien!
Во-первых. А где в вышеозначеном классе присутствует такое поле, как Lines? TStringGrid наследуется по цепочке (от ближнего к дальнему родственнику) TDrawGrid<-TCustomDrawGrid<-TCustomGrid<-TCustomControl<-TWinControl<-TCntrol<-TComponent<-TPersistent<-TObject и ни у одного нету такого свойства. Откуда Вы его взяли? Даже, если предположить, что использовался какой-то другой грид, то, исходя из описания в Вашем вопросе, Lines - это TStrings, а свойство Count у этого TStrings объявлено, как read only, т.е при всем желании вы не можете в него писать, только считывать. Потом. Исходя из логики того, что написано, простое уменьшение счетчика объектов не приводит к явному или неявному уничтожению объекта в памяти с последующей очисткой занятых блоков памяти. Так что, поясните о чем все-таки идет речь.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 16.09.2005, 10:39

Отвечает: Werewolf
Здравствуйте, TR da Alien!
Наверное StringGrid1.RowCount=xxx.
StringGrid1.Lines.Count - таких свойств TStringGrid не имеет.
Установка нового значения RowCount не влияет на объем памяти.
Рациональнее будет использовать RxMemTable(RxLib или другой подобный компонент) + DbGrid(Borland VCL или любой другой dbgrid)
Попробуйте.
С высвобождением памяти там все ОК+доступ к данным как к таблице БД.
Ответ отправил: Werewolf (статус: 9-ый класс)
Отправлен: 16.09.2005, 10:55

Отвечает: Rusland
Здравствуйте, TR da Alien!
Изменение значения RowCount не освобождает значения строк. Можете сами проверить, если набрать текст в 5 строчках, присвоить RowCount 3, а потом снова 5, то значения вернуться.
Попробуйте приведенный ниже код. Удачи.

Приложение:

---------
Тише едешь, дальше будешь... от того места куда едешь

Ответ отправил: Rusland (статус: Студент)
Отправлен: 16.09.2005, 15:19

Отвечает: Силантьев Евгений Александрович
Здравствуйте, TR da Alien!
Дело в том что .RowCount меняет количество отображаемы строк, но не отчищает их! Для очистки надо писать .Rows[номер строки].Clear
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 6-ой класс)
Отправлен: 16.09.2005, 20:44

Отвечает: Denisss
Здравствуйте, TR da Alien!
Попробуйте перед установкой RowCount очищать ячейки с помощью процедуры Rows[i].Clear;
(см. пример)

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Практикант)
Отправлен: 17.09.2005, 12:20


Вопрос № 26.436
А можно ли поворачивать шейп??? Так чтоб квадрат стал ромбом.
Кроме шейпа есть ли что то подобное???
Нужны очень ромбики или на крайний случай треугольники (может компонент какой есть?).

С рисованием неохота связываться. И картинка в данном случае не подходит.

И еще: говорят, что даже простейшую пазлу (или примитивные графические игры) лучше делать уже с использованием опенЖЛ или Директ Икс. Посоветуйте, что лучше сначала изучать и с чего начать.

Спасибо за предыдущие ответы.
Отправлен: 16.09.2005, 10:55
Вопрос задал: ququ1 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: sir henry
Здравствуйте, ququ1!
1. Это не поворачивать называется. :)
Нет, нельзя. Там кроме как перерисовкой ничем это не исправишь. Тут как ни крути, а либо OpenGL, либо DirectX нужно применять.
Компоненты можно поискать на www.torry.net.
2. Простейшую пазлу и вообще много чего можно написать используя только Дельфийские примитивы рисования. Если же Вы хотите нарисовать самолет, причем с учетом освещения, поворотов и прочих прибамбасов (т.е. рисунок у Вас будет не статическим), тогда проще, действительно, OpenGL или DirectX.
Изучать можно начинать и то и другое. Никаких объективных критериев выбора тут нет - исключительно личные предпочтения. Когда изучите основы и того и другого, тогда у Вас появится возможность сравнить, что больше подходит для решения Вашей конкретной задачи. А так, по возможностям они равноценны. Может быть OpenGL (с моей точки зрения) полегче в освоении, т.к. DirectX строится на основе интерфейсов (не меню с кнопками, а типы общения компонентов между собой в виндах) и в DX синтаксис более сложный.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 16.09.2005, 11:21

Отвечает: Romodos
Здравствуйте, ququ1!
По моему, на http://www.delphiarea.com был компонент TRotateImage
Там можно картинку поворачивать
Насчёт OpenGl и DirectX. Сразу скажу, что на желе программировать проще, например по книге Краснова. А для паззлы вовсе необязательно её юзать

---------
FAQ me off!
Ответ отправил: Romodos (статус: 7-ой класс)
Отправлен: 16.09.2005, 14:07

Отвечает: Силантьев Евгений Александрович
Здравствуйте, ququ1!
Нет Shape вращать нельзя. Про компоненты: думаю таких нет, но стоит глянуть на torry.net. Начинать советую с OpenGL - он попонятнее и попроще.

Теперь по поводу ромбиков и другого (из вопроса я не понял, зачем они Вам, поэтому как понял):
Если ромбик будет статичным, то я бы нарисовал его на форме (как .bmp-файл).
Если нет, то поместил бы его в Image и перемещал сам Image.
Будут вопросы обращайтесь. Удачи!!!
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 6-ой класс)
Отправлен: 16.09.2005, 22:19


Вопрос № 26.460
Напомните пож.что нужно написать чтобы при нажатии кнопки на клаве вниз возникало событие?
Отправлен: 16.09.2005, 19:51
Вопрос задал: Sassoft (статус: Посетитель)
Всего ответов: 7
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Jadd
Здравствуйте, Sassoft!
Не написать, а перехватить сообщение. Т.е. идем во вкладку Events ObjectInspeсtor'а и определяем обработчик события нажатия и/или отпускания клавиши. OnKeyDown/OnKeyUp
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Практикант)
Отправлен: 16.09.2005, 20:09

Отвечает: DAiMor
Здравствуйте, Sassoft!
Обрабатывая событие OnKeyDown и обрабатывая полученный код нажатой клавиши
короче смотри приложение разберешся я думаю

Приложение:

Ответ отправил: DAiMor (статус: 1-ый класс)
Отправлен: 16.09.2005, 20:15

Отвечает: Силантьев Евгений Александрович
Здравствуйте, Sassoft!
Это должно вам помочь:

procedure TForm1.HandleMessages(var Msg: tMsg; var Handled: Boolean);
begin
if (Msg.Message = WM_KeyDown) and (Msg.wParam = VK_DOWN) then
begin
ShowMessage('Нажата стрелка вниз');
Handled := True;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := HandleMessages;
end;

Удачи!!!
---------
The world is mine! :)
Ответ отправил: Силантьев Евгений Александрович (статус: 6-ой класс)
Отправлен: 16.09.2005, 22:19

Отвечает: sir henry
Здравствуйте, Sassoft!
"... при нажатии кнопки на клаве вниз..." - как бы еще понять сию сентенцию... :)
Если Вы имеете в виду событие OnKeyPress или OnKeyDown, то оно возникнет АВТОМАТИЧЕСКИ, как только Вы нажмете кнопку на клаве.
Напоминаю, не по теме, но это более важно, форма задания вопроса очень важна, а то ответа можно и не дождаться. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 17.09.2005, 07:05

Отвечает: Ballon
Здравствуйте, Sassoft!

Используйте события OnKeyDown, OnKeyPress или OnKeyUp, а чтобы проверить была ли нажата клавиша вниз (vk_Down) смотрите пример:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=vk_Down then
ShowMessage('Вниз');
end;
Ответ отправил: Ballon (статус: 4-ый класс)
Отправлен: 17.09.2005, 07:08

Отвечает: Romodos
Здравствуйте, Sassoft!
Предварительно ставим keypreview и формы в тру
Это событие OnKeyDown у формы
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_down then showmessage('');
end;


---------
FAQ me off!
Ответ отправил: Romodos (статус: 7-ой класс)
Отправлен: 17.09.2005, 09:24

Отвечает: Anefedov
Здравствуйте, Sassoft!
в Events формы событие OnKeyPressed
Ответ отправил: Anefedov (статус: 6-ой класс)
Отправлен: 20.09.2005, 13:59


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.delphiplus
Отписаться
Вспомнить пароль

В избранное