Вопрос № 81975: Здравствуйте уважаемые эксперты!
Помогите найти компонент. Это должна быть круглая "ручка", а-ля регулятор газа на плитах :). Вообщем, если кому знакомы регуляторы в магазинах напряжения, то вот это оно. Надеюсь вы меня поняли.
Спас...Вопрос № 82001: Здравствуйте уважаемые эксперты! Вопрос такой: Пишу БД и мне ндо делать что-то типа отчета... Я в Word-e с помощью WordApplication создаю таблицу и заполняю ее... с этим у меня проблем не возникло... проблема вот в чем: как программно в Ворде у опред...Вопрос № 82013: Здравствуйте!
Помогите найти компонент для отображения объектов MS Equation 3.0 (математические формулы) в место RichEdit и RadioButton, желательно бесплатный или как сделать самому?...Вопрос № 82015: Уважаемые эксперты. Ни как не могу разобраться почему в цикле (код прилагается) if z=p then если указать = или значение false то идёт по ветви then даже если элемент уже создан и нужно перейти на ветвь else. Или если присвоить значение true или поста...Вопрос
№ 82025: Кто в курсе - помогите. Нужно реалищовать программу оперативного плана для пожарных частей. Суть такая: в программу загружается план этажа. Мы мышкой ставим точку возгорания и от неё программа имитирует распространение пламени. При достижении дверей ...Вопрос № 82080: Здравствуйте, уважаемые эксперты!
Как найти координаты кнопок в MainMenu? Мне нужны их координаты, чтобы переместить туда курсор. Может быть есть другой способ переместить на нужную кнопку курсор.
Спасибо....Вопрос № 82081: Здарвствуйте, уважаемые эксперты!
Как сделать так, чтобы в то время, как я програмно передвигаю курсор, пользователь не мог передвигать этот курсор мышкой, а также не мог передвигать или открывать нувые окна?
Спасибо....Вопрос № 82086: Здравствуйте, уважаемые эксперты!
Как подсчитать количество выполненных опреации и время,затраченное на выполнение? Используя GetTickCount я получаю 0
Спасибо....Вопрос № 82111: Такая задачка есть. Вро простенькая, но у меня не получается. Помогите пожалуйсто, а то уже все конспекты пересмотрела, а там нет ничего подобного.
Условие:
Найдите сумму всех нечётных чисел от -100 до 100
Я вот так решала:...
Вопрос № 81.975
Здравствуйте уважаемые эксперты!
Помогите найти компонент. Это должна быть круглая "ручка", а-ля регулятор газа на плитах :). Вообщем, если кому знакомы регуляторы в магазинах напряжения, то вот это оно. Надеюсь вы меня поняли.
Спасибо!
Отправлен: 10.04.2007, 20:36
Вопрос задал: aaqs (статус: 5-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Iksmensp
Здравствуйте, aaqs!
Мне приходит в голову только TTrackBar с закладки win32 - у меня такая плита газовая.
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 10.04.2007, 21:04
Отвечает: Troyan
Здравствуйте, aaqs!
Мне кажется, что http://www.delphiworld.narod.ru/base/lib_resize_btn.html - это именно то, что вам нужно!
--------- Цени законы своего сердца, иди на обгон! Будь человеком, не запачкай свою совесть!
Ответ отправил: Troyan (статус: 9-ый класс)
Ответ отправлен: 10.04.2007, 21:08
Отвечает: Lomer
Здравствуйте, aaqs!
Почитайте тут, может, поможет:
http://flasher.ru/forum/archive/index.php/t-75936.html
Хотя и не Delphi, но тема та же.
Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 10.04.2007, 21:35
Отвечает: Georg
Здравствуйте, aaqs!
Ранше было RXLib, а сейчас JEDI-VCL http://jvcl.sourceforge.net,
Там точно есть такое.
Удачи!
Ответ отправил: Georg (статус: 1-ый класс)
Ответ отправлен: 11.04.2007, 14:31
Вопрос № 82.001
Здравствуйте уважаемые эксперты! Вопрос такой: Пишу БД и мне ндо делать что-то типа отчета... Я в Word-e с помощью WordApplication создаю таблицу и заполняю ее... с этим у меня проблем не возникло... проблема вот в чем: как программно в Ворде у определенного столбца таблицы сдлеать выравнивание по левому краю... Надо чтобы первая строка этого столбца была по центру (заголовок) и остальные по левому краю...
Заранее спасибо!
Отправлен: 10.04.2007, 23:11
Вопрос задал: Djoin (статус: 3-ий класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Gh0stik
Здравствуйте, Djoin!
Это делается таким образом, покажу на примере:
WordApp.Selection.Tables.Item(1).Cell(1,2).Select; {выделяем нужную ячейку, допустим в 1-я строка 2-й столбец.}
WordParagr.ConnectTo(WordApp.Selection.ParagraphFormat); {связываем оформление параграфа с выделенным текстом}
WordParagr.Alignment:=wdAlignParagraphRight; {настраиваем оформление...}
У меня в примере использованы такие объекты: WordApp: TWordApplication;
WordParagr: TWordParagraphFormat;
В примере рассмотрено ка сделать форматирование по правому краю (WordParagr.Alignment:=wdAlignParagraphRight;).
Если Вам нужны другие вот список возможных: wdAlignParagraphJustify - по ширине
wdAlignParagraphRight - по правому краю
wdAlignParagraphCenter - по центру
wdAlignParagraphLeft - по левому краю
Также Вы сможете найти и еще несколько форматов, но я в них к сожалению не сильно разобрался, если Вы найдете более рациональное решение, то сообщите.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 11.04.2007, 00:33 Оценка за ответ: 5 Комментарий оценки: Оромное спасибо! Именно то, что я хотел увидеть... Буду пробовать.
Вопрос № 82.013
Здравствуйте!
Помогите найти компонент для отображения объектов MS Equation 3.0 (математические формулы) в место RichEdit и RadioButton, желательно бесплатный или как сделать самому?
Отправлен: 11.04.2007, 01:12
Вопрос задал: Burgem (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Werewolf
Здравствуйте, Burgem!
Необходимо:
1) поместить на форму компонент TOLEContainer
2) нажать на нем правой клвишей и в меню выбрать Insert Object
3) В стандартном диалоге "Вставка объекта" указать "создать новый" и в списке выбрать Microsoft Equation 3.0 при этом откроется редактор формул, в меню файл можно нажать закрыть
4) бросить на форму TPopupMenu и
5) установить свойства для компонента TOleContainer
PopupMenu := PopupMenu1;
SizeMode := smCenter;// или любой другой в зависимости от дизайна формы
6) при желании на форму можно добавить TMainMenu, чтобы меню Microsoft Equation встраивалось в меню формы
Удачи.
Ответ отправил: Werewolf (статус: Студент)
Ответ отправлен: 11.04.2007, 10:55
Вопрос № 82.015
Уважаемые эксперты. Ни как не могу разобраться почему в цикле (код прилагается) if z=p then если указать = или значение false то идёт по ветви then даже если элемент уже создан и нужно перейти на ветвь else. Или если присвоить значение true или поставить знак < то задействана только ветвь else не смотря на то что это противоречит условию.
Спасибо за внимание
Приложение:
Отправлен: 11.04.2007, 01:22
Вопрос задал: Sad (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Mo-skin
Здравствуйте, Sad!
Если элемент создан то его GetDataSize буде больше 0.
Мой вариант кода вприложении.
Надеюсь, что правильно понял Ваш вопрос.
Приложение:
--------- Чем больше женщину мы меньше, тем меньше больше мы ее!
Ответ отправил: Mo-skin (статус: 4-ый класс)
Ответ отправлен: 11.04.2007, 02:16 Оценка за ответ: 5 Комментарий оценки: Спасибо огромное. Код помимо найденой синтаксической ошибки ещё и оптимезирован. К томуже отличное решение с весом программы. Спасибо.
Отвечает: Gh0stik
Здравствуйте, Sad!
Вот модифицированный код (с коментариями):
var r,i: integer; {как видите не нужны логические переменные... и переменная g}
t: Tregistry;
begin
r:= 1234554321;
i:=1;
t:= TRegistry.create;
t.RootKey:= HKEY_LOCAL_MACHINE;
t.OpenKey('SOFTWAREReestr Work', true);
t.WriteInteger('Registration',r);
if not t.ValueExists('OpenTimes') then
t.WriteInteger('OpenTimes',i) {ошибка была в различных названиях ключей OpenTimes и OpenTimse}
else
begin
i:=t.ReadInteger('OpenTimes'); {обошлись без промежуточной переменной}
inc(i);
t.WriteInteger('OpenTimes',i);
t.CloseKey;
end;
end;
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 11.04.2007, 02:32 Оценка за ответ: 5 Комментарий оценки: Спасибо Уакзаны точные места ошибок, уменьшен код, идея со сравнением обёма занимаемой строки, сохранена логика. Спасибо использу ваш вариант.
Вопрос № 82.025
Кто в курсе - помогите. Нужно реалищовать программу оперативного плана для пожарных частей. Суть такая: в программу загружается план этажа. Мы мышкой ставим точку возгорания и от неё программа имитирует распространение пламени. При достижении дверей (у каждой свой предел прочности) появляется новый очаг с центром в двери.
Так вот...сам вопрос - КАК реализовать постепенное распространение (БОЛЕЕЕ РАЦИОНАЛЬНОЕ ЧЕМ У МЕНЯ)пламени с учётом, что дальше стен пламя, естественно, не распространяется.
Я использовал просто вектор из центра(где кликаю мышью) и в конце вектора на длине (R) ставлю точку. Следующая точка идёт смещением на угол (альфа). НО это попиксельное прорисовывание каждой концентрической окружности грузит систему((( не сильно, но боюсь что на компах послабее моего это будет смотреться ужасно. ПОМОГИТЕ !!!
Отправлен: 11.04.2007, 05:52
Вопрос задал: Netware (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: PGM
Здравствуйте, Netware!
По технике: Надеюсь рисуете попиксельно не на экране, а в памяти и с доступом по ScanLine например или указателями, а потом копируете всю картинку на экран - если нет, то попробуйте - это значительно ускоряет процесс.
По алгоритму: Можно попробовать использовать алгоритм закраски замкнутых поверхностей - анализируете точки соседние с уже закрашенными и если расстояние до "очага возгорания" удовлетворяет условиям закрашиваем (не забывая, учитывать наличие стен при расчете расстояний) - подобные алгоритмы я видел работающими еще на 286-х машинах - основная нагрузка ложится на расчет расстояний - арифметика должна быть целочисленной и не извлекайте корней квадраты ничем не хуже для сравнений.
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 11.04.2007, 10:32
Отвечает: Georg
Здравствуйте, Netware!
Хочу добавить,что рисовать надо на канве TBitMap:
var BitMap: TBitMap;
begin
BitMap:=TBitMap.Create;
BitMap.Canvas.Assing(Image1.Canvas); // копируем канву
//здесь что то рисуем
Canvas.Brash.Color:=clRed;
Canvas.Pen.Color:=clRed;
Canvas.MoveTo(X, Y);
Canvas.LineTo(X1, Y1);
...........
...........
// перерисовок нет т.к. канва BitMap не видна
Image1.Canvas.Assing(BitMap.Canvas); // возвращаем канву на место
//здесь перерисовка одна
end;
Ответ отправил: Georg (статус: 1-ый класс)
Ответ отправлен: 12.04.2007, 10:25
Вопрос № 82.080
Здравствуйте, уважаемые эксперты!
Как найти координаты кнопок в MainMenu? Мне нужны их координаты, чтобы переместить туда курсор. Может быть есть другой способ переместить на нужную кнопку курсор.
Спасибо.
Отправлен: 11.04.2007, 14:39
Вопрос задал: Vassea (статус: 2-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Lomer
Здравствуйте, Vassea!
Сейчас набросал - вроде работает. cx и cy - позиция пункта относительно первого
пункта.
procedure ClickMenu(cx,cy:integer);
var
handle:hwnd;
rct:TRect;
x,i:integer;
const MenuItemHeight=28;
begin
x:=16;
for i:=1 to cx do
x:=x+6*(Length(Form1.MainMenu1.Items[i].Caption)-1)+17;
GetWindowRect(Form1.handle,rct);
SetCursorPos(rct.Left+23+x,rct.Top+55);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
SetCursorPos(rct.Left+23+x,
rct.Top+55+cy*MenuItemHeight);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
end;
Ответ отправил: Lomer (статус: 4-ый класс)
Ответ отправлен: 11.04.2007, 19:26 Оценка за ответ: 4
Вопрос № 82.081
Здарвствуйте, уважаемые эксперты!
Как сделать так, чтобы в то время, как я програмно передвигаю курсор, пользователь не мог передвигать этот курсор мышкой, а также не мог передвигать или открывать нувые окна?
Спасибо.
Отправлен: 11.04.2007, 14:41
Вопрос задал: Vassea (статус: 2-ой класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, Vassea!
Чтобы "заморозить" курсор, можно, например, применить таймер. Поместите на форму TTimer (вкладка System), поставьте ему маленький Interval (50 мс например), а в обработчике OnTimer перещайте курсор в нужное вам место. Переместить курсор можно так: SetCursorPos(100,100); - в точку (100; 100) на экране. Если попытаться переместить курсор, сделать это не получится. Конечно, он будет немного "дрожать", но переместить всё равно не удастся.
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Есть такая функция WinAPI BlockInput - не только мышью, но и клавиатурой пользователь не сможет управлять - и никакого "дрожания".
Ответ отправил: PGM (статус: 4-ый класс)
Ответ отправлен: 11.04.2007, 17:47 Оценка за ответ: 5
Отвечает: Iksmensp
Здравствуйте, Vassea!
Можно в процедуре нажатия кнопки написать
procedure TForm1.Button1Click(Sender: TObject);
var
cr:trect;
begin
cr:=rect(0,0,0,1);// область движения курсора 1 пиксел
clipcursor(@cr);// мышка движется только в области
ShowCursor(false);// нет мигания
Надеюсь помог
end;
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 11.04.2007, 19:13 Оценка за ответ: 5
Вопрос № 82.086
Здравствуйте, уважаемые эксперты!
Как подсчитать количество выполненных опреации и время,затраченное на выполнение? Используя GetTickCount я получаю 0
Спасибо.
Отправлен: 11.04.2007, 15:12
Вопрос задал: Vassea (статус: 2-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, Vassea!
Количество выполненных операций можно получить только вручную. Никакого счётчика числа выполненных строк не предусмотрено.
Насчёт временем вы правы - нужно использовать GetTickCount(). Как именно его использовать: запомнить значение до работы, значение после, и затем посчитать разность. См. пример в приложении. Цикл я сделал специально, чтобы было затрачено какое-то время. Если убрать цикл совсем - будет результат 0 мс. Это и понятно - компьютер ведь выполняет операции с огромной скоростью. Ну и наконец я делаю вывод времени удобным - если оно больше секунды, то в секундах, если меньше - то в миллисекундах. Желаю удачи!
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: Ерёмин Андрей
Здравствуйте, Speedmeister!
Ваша ошибка в строке s:=s+(i mod 2=1); То, что в скобках - это логическое выражение, которое, естественно, нельзя сложить с числом. Правильно так: if (i mod 2 = 1) then s:=s+i;
P.S. Сумма - ноль :-)
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: Сарумян
Здравствуйте, Speedmeister!
Вообще то правильнее код будет так вот (см. приложение).
Но!!
Зачем считать сумму всех нечетных чисел от -100 до 100. Она всегда равна 0!
Что нечетных , что четных.
Чтоб хоть какая то сумма выводилась стоит менять диапазон суммирования, т.е. не от -100 до 100, а допустим до 134.
Приложение:
--------- Пришел, увидел, развернулся и ушел...
Ответ отправил: Сарумян (статус: 3-ий класс)
Ответ отправлен: 11.04.2007, 17:31
Отвечает: Iksmensp
Здравствуйте, Speedmeister!
В вашей программе есть лишние действия(s:=0;readln). И чтобы найти сумму, необходимо на каждом шаге цикла проверять условие нечетности.
Это можно сделать таким способом
if (i mod 2)<>0 then 'нечетное'
Следовательно программа будет выглядеть так:
var
i,s:integer;
begin
for i:=-100 to 100 do begin
if (i mod 2)<>0 then s:=s+i;
end;
writeln(s);
end.
Ответ отправил: Iksmensp (статус: 2-ой класс)
Ответ отправлен: 11.04.2007, 18:33
Отвечает: Gh0stik
Здравствуйте, Speedmeister!
Просмотрев все ответы все-таки решил добавить и свой, поскольку я не совсем согласен с такой записью (abs(i) mod 2 = 1) - зачем тут находить модуль не понятно??
Вот два варианта решения. В Вашем просто забыли за условия... Вариант1.
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i,s:integer;
begin
s:=0;
For i:=-100 to 100 do
begin
if odd(i) then s:=s+i;
end;
writeln(s);
readln
end.
Вариант2.
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i,s:integer;
begin
s:=0;
For i:=-100 to 100 do
begin
if (i mod 2=1) then s:=s+i;
end;
writeln(s);
readln
end.
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 11.04.2007, 18:48
Отвечает: Louken
Здравствуйте, Speedmeister!
Напишу и свой вариант, который отличается от других выбором другого вида цикла:
Приложение:
Ответ отправил: Louken (статус: 1-ый класс)
Ответ отправлен: 11.04.2007, 19:18
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 11.04.2007, 20:35
Отвечает: Химяк Виктор Васильевич
Здравствуйте, Speedmeister!
У вас все верно, за исключением проверки на четность /нечетность необходимое исправление:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var i,s:integer;
begin
s:=0;
For i:=-100 to 100 do
begin
if (i mod 2<>0) then s:=s+i;//исправление!!!
end;
writeln(s);
readln
end.
А вообще то странно, что задают такое задание, тут и программы не надо что бы получить результат =0
Ответ отправил: Химяк Виктор Васильевич (статус: 4-ый класс)
Ответ отправлен: 11.04.2007, 21:46
Отвечает: Базанов Иван Александрович
Здравствуйте, Speedmeister!
Немного подправим ваш текст:
.....
For i:=-100 to 100 do
if (i mod 2) = 1 then // Сначала проверка
s:=s+i; // Потом если нужно сложение
writeln(s);
.......
У вас же прибавляется 0 если четное и 1 если число нечетное.
--------- Disassemble your life and get the key