Вопрос № 45704: Здравствуйте уважаемые эксперты. В моей проге происходит много передвижений окон и панелей (выезжают, заезжают, растягиваются... и все через таймер). На моем компьютере они движутся плавно, а на других рывками и медленнее, хотя тех. характеристики у ...Вопрос № 45733: Здравствуйте уважаемые эксперты.
Ситуация такая: написана небольшая прога печати накладных.
Реализована через ADO и Fast Report 3.0
т.е. инфа содержиться в 2 базах *.DBF и только потом тянется в Report.
Количество копий в свойствах Fr...Вопрос № 45779: Здравствуйте, уважаемые эксперты.
procedure ... (...);
var i:integer;
begin
...
for i:=0 to 7 do
begin
...
end;
...
end;
Когда прохожу эту процедуру троссировкой, то переменная i принимает значения...Вопрос № 45780: Подскажите как можно менять цвет части текста (например одна часть зелёная другая красная) в компоненте ListBox или подскажите аналогичный компонент в котором это можно делать. Зарание благодарен...
Вопрос № 45.704
Здравствуйте уважаемые эксперты. В моей проге происходит много передвижений окон и панелей (выезжают, заезжают, растягиваются... и все через таймер). На моем компьютере они движутся плавно, а на других рывками и медленнее, хотя тех. характеристики у них выше и ОС та же. Почему так? Что тут можно сделать? Заранее спасибо.
Отвечает: Маренич Владимир
Здравствуйте, Виталий Зелинский!
По таймеру - это не очень красиво... Вот и работает так.
Дело в том, что по таймеру возникает с соотв. переодичностью системное сообщение приложению, которое вставляется в очередь на обработку приложением. OnTimer в классе TTimer вызывается как раз при обработке таких сообщений. Нет никакой гарантии того, что такое сообщение будет обрабатываться скажем каждых 10 мс. Для Ваших целей я бы рекомендовал использовать отдельный поток (thread), используя класс TThread, который умеет "правильно" работать с VCL. Как работать с TThread - это отдельная тема и в рамках
ответа на вопрос не может быть освещена. Попробуйте для начала почитать об этом в HELPе Delphi. Переделать будет не трудно, а эффект будет очень наглядным. Желаю удачи.
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 09.06.2006, 12:56 Оценка за ответ: 4 Комментарий оценки: Будем учиться работать с TThread. Большое спасибо за совет.
Отвечает: Полховский Александр Владимирович
Здравствуйте, Виталий Зелинский!
Вот примерчик к предыдущему ответу (может не очень красивый, но основу уловите): (2 кнопки, клацать на вторую)
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TThread1 = class(TThread)
procedure Execute; override;
procedure UpDate;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Thread1: TThread1;
Step:integer;
implementation
{$R *.dfm}
procedure TThread1.Execute;
var
k1:integer;
begin
for k1:=1 to 100 do
begin
Step:=k1;
Sleep(10);
Thread1.Synchronize(UpDate);
end;
Thread1.Terminate;
end;
procedure TThread1.UpDate;
begin
Form1.Button1.Width:=(Step*Step)div(20)+1;
form1.Caption:=inttostr(step);
form1.Button1.Repaint;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Thread1:=TThread1.Create(false);
Thread1.FreeOnTerminate:=true;
end;
end.
--------- Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 10.06.2006, 00:07 Оценка за ответ: 5 Комментарий оценки: По примерам учиться легче. Большое спасибо за ответ!
Вопрос № 45.733
Здравствуйте уважаемые эксперты.
Ситуация такая: написана небольшая прога печати накладных.
Реализована через ADO и Fast Report 3.0
т.е. инфа содержиться в 2 базах *.DBF и только потом тянется в Report.
Количество копий в свойствах FrxReport забито по умолчанию 5.....
но печатается реально - только 1.
Не могу понять в чем причина, подскажите плиз.
И еще, возможно ли сразу поставить курсор на количество копий
при нажатии на кнопку Print???
Заранее благодарен.
Отвечает: Shcherbakov Anton
Здравствуйте, Дмитрий Николаевич!
проверьте в расположены ли элементы которые вы печатаете на MasterBand. возможно поэтому и печатает ваша программа только одну запись.
Ответ отправил: Shcherbakov Anton (статус: 2-ой класс)
Ответ отправлен: 09.06.2006, 13:12
Вопрос № 45.779
Здравствуйте, уважаемые эксперты.
procedure ... (...);
var i:integer;
begin
...
for i:=0 to 7 do
begin
...
end;
...
end;
Когда прохожу эту процедуру троссировкой, то переменная i принимает значения от 8 к 1!!!! поскольку внутри цикла идет обращение к массиву размерностью [0..7] программа перестает выполняться с критической ошибкой, потому что элемента с индексом 8 нет.
глобальной переменной i нет, она только локальная.
Я вообще не понимаю, каким образом подобное может происходить.
В чем может быть проблема?
Спасибо за ответы.
Отвечает: Jadd
Здравствуйте, Lichkaty Alexander!
Не совсем понятно что надо. Судя по коду, Вы создали массив из 8 элементов. Все массивы (все без исключения) 0-based, что означает, что первый элемент находится под индексом 0(!!!!!), а не 1. Если принципиально, чтобы возможно было взять элемент под индексом 8, тогда надо создавать массив размерностью 9 (!!!!!) элементов. Т.е. создаем массив N элементов, а последний элемент массива будет с индексом N-1. Все понятно?
Успехов.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ICQ: 28260749 ---- Ответ отправлен: 09.06.2006, 22:37
Отвечает: Решетник Д
Здравствуйте, Lichkaty Alexander!
У меня такая ситуация была. к сожелению причины я не узнал. в моем случае ЭТО исчезло после перезагрузки системы.
Если ничего не выйдет, прибегните к крайнему способу - используйте индекс i-1 )))
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: 8-ой класс)
Ответ отправлен: 09.06.2006, 22:41
Отвечает: Zubex
Здравствуйте, Lichkaty Alexander!
Дело в том, что цикл for в делфи иногда действительно не правильно показывает значение i, при этом цикл отрабатывает правильно. Отключите оптимизацию в свойствах проекта на вкладке "Compile" и еще раз пройдите под отладкой ваш цикл.
Возможно это поможет обнаружить обращение к несуществующему индексу массива или другую ошибку.
Удачи!
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 6-ой класс)
Ответ отправлен: 12.06.2006, 10:53 Оценка за ответ: 5
Вопрос № 45.780
Подскажите как можно менять цвет части текста (например одна часть зелёная другая красная) в компоненте ListBox или подскажите аналогичный компонент в котором это можно делать. Зарание благодарен
Отправлен: 09.06.2006, 22:47
Вопрос задал: Sysanin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Полховский Александр Владимирович
Здравствуйте, Sysanin!
Для этого нужно вручную перерисовывать элементы списка. Поставьте свойство Style в lbOwnerDrawFixed, напишите обработчик события OnDrawItem. Там можете хоть разными цветами, хоть рисовать.
Только почитайте об этой прорисовке в руководстве, там ещё придётся прорисовывать и рамку, и всё остальное. В параметре State будет передаваться текущая стадия прорисовки, и Ваш обработчик должен будет адекватнореагировать на него.
--------- Спасём нашу хрупкую планету !
Смотрите мой ответ на вопрос № 40163. А так же Вы увидите и другие варианты решения Вашей проблеммы....
Удачи!!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаються события на земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Студент)
Ответ отправлен: 12.06.2006, 11:40