IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Графический редактор в Delphi
SeregaR1Val
сообщение 21.01.2011 17:30
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Добрый день! Необходимо написать графический редактор следующего вида:
Окно разбито на 2 части, в левой вводятся параметры фигуры, в правой она отрисовывается. Например: для начала задан прямоугольник высотой 50 и шириной 100. Указываем высоту - 25, на ней ширина 50 и фигура должна преобразоваться, приняв форму песочных часов и далее в этом духе. Надеюсь нормально объяснил...

Программу еще не начал, код писать не прошу, необходима консультация в том, какие элементы выбрать для разработки, TPaintBox или TImage и т.д. и как лучше всё это отрисовывать, может кто может дать совет?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
IUnknown
сообщение 3.05.2011 11:02
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


RussoTuristo, ты не думал никогда над тем, что чем меньше строк в программе - тем лучше? Вот тебе 2 хинта, как можно безо всяких проблем убрать по десятку строк в каждом случае, без изменения функционала программы.

Первый - касается вот этого ужаса (из процедуры TzoneMath.ShowOnTable):
Цитата
  for i:=1 to steps do begin
grid.Cells[0,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].tau,-5));
grid.Cells[1,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].Fp,-5));
grid.Cells[2,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].Gk,-5));
grid.Cells[3,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].y,-5));
grid.Cells[4,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].Qpozh,-5));
grid.Cells[5,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].Ro2,-5));
grid.Cells[6,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].T2,-5));
grid.Cells[7,i]:=FloatToStr(RoundTo(rooms[room].iParams[i-1].Gm,-5));
end;
Зачем это делать, расскажи? Что, выводить значения можно только вот таким, допотопным, "строка за строкой" способом? А понадобится тебе уменьшить точность, будешь везде "-5" изменять на "-4" что-ли?

Исправление: (Показать/Скрыть)

Функционал не изменился, все работает абсолютно так же, как и раньше.

Второй. Зачем дублировать здесь:
Цитата
function TzoneMath.fGm(iter,CurrentRoom:integer; woll:TWoll; forroom:integer):extended;

function TrapezeSt1(a, b: extended; eps: extended): extended;
function func(h: extended): extended;
begin
curroom:=CurrentRoom;
Result:=Woll.Proem[0].Width * Rooms[CurrentRoom].iParams[iter].Ro2P *
sqrt((2 * TrapezeInt(Rooms[CurrentRoom].Height-Rooms[CurrentRoom].iParams[iter].yP, woll.Proem[0].Height, 0.01, fdP_1))/Rooms[CurrentRoom].iParams[iter].Ro2P);
end;
var
xx1,xx2,xx3:extended;
c:integer;
begin
result:=0;
for c:=1 to round(abs(b-a)/eps) do begin
xx1:=func(a+c*eps);
xx2:=func(a+c*eps+eps);
if xx2>xx1 then begin
xx3:=xx1
end else begin
xx3:=xx2;
end;
result:=result+abs(xx2-xx1)*eps+abs(xx3)*eps;
end;
end;

begin
if (Rooms[CurrentRoom].Height-Rooms[CurrentRoom].iParams[iter_buf].YP)<woll.Proem[0].Height then begin
result:= TrapezeSt1(Rooms[CurrentRoom].Height-Rooms[CurrentRoom].iParams[iter].yP, Woll.Proem[0].Height, 0.01);
end else begin
result:=0;
end;
end;
то, что уже сделано в модуле intfunc? У тебя же уже есть там функция, вычисляющая интеграл. Зачем же ты ее тут опять переписываешь заново? Всё проще:

Исправление: (Показать/Скрыть)
Функционал опять же, остался прежним, а если так - то зачем писАть больше? Кстати, еще один повод перейти на новую версию Дельфи. в 2009 и выше это делается через анонимные функции, избавляя тебя от необходимости добавлять вон те две глобальные переменные.

Да, и еще... Я бы подумал над переносом хотя бы части глобальных переменных в соответствующие классы (в секцию private). Скажем, curroom. Внести ее в TzoneMath, например. Так же, как и iter_buf. Подумай над этим... И "разгрузи" код, путем использования With. Его ж читать невозможно...

Сообщение отредактировано: IUnknown - 3.05.2011 11:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
SeregaR1Val   Графический редактор в Delphi   21.01.2011 17:30
TarasBer   Что-то я пока не очень понял. Если мы можем только...   21.01.2011 18:30
Гость   Да, только такой, возможно надо будет сругленные у...   21.01.2011 19:51
TarasBer   То есть все инструкции определяются только двумя п...   21.01.2011 20:38
RussoTuristo   Извините, придется заходить не под собой, мой проф...   4.02.2011 10:51
TarasBer   > StringGrid1.Cells[0,0]:='Ширина'; ...   4.02.2011 11:17
RussoTuristo   Что-то до меня не доходит... В строке 0 - заголово...   4.02.2011 11:25
TarasBer   Я тебе привёл 2 фрагмента. В одном ты берёшь 1й ин...   4.02.2011 11:30
RussoTuristo   В одном ты берёшь 1й индекс 0 и 1 В другом ты берё...   4.02.2011 11:52
TarasBer   Ещё раз. Вот тебе два куска твоего кода: String...   4.02.2011 12:03
RussoTuristo   Спасибо, понял, что с индексами не так!   4.02.2011 12:11
volvo   Ничего не исчезло. Посмотри первое сообщение. Если...   4.02.2011 12:36
RussoTuristo   Ничего не исчезло. Посмотри первое сообщение. Есл...   4.02.2011 12:46
TarasBer   Просто пишешь BitBtn1Click(Sender);   4.02.2011 13:00
RussoTuristo   Помогите, пожалуйста, еще с одной вещью: как прави...   4.02.2011 13:40
TarasBer   Надо так: buf1:=ar1j]; buf2:=ar1[2,[b...   4.02.2011 13:48
RussoTuristo   Спасибо! Невнимательность моя... вроде могу со...   4.02.2011 14:32
TarasBer   PaintBox1.Canvas.StretchDraw(какие-то параметры, н...   4.02.2011 14:37
RussoTuristo   StretchDraw не подойдет на сколько я понимаю.... P...   7.02.2011 8:45
volvo   У тебя какой-то "неправильный мёд" (С) ...   7.02.2011 9:11
RussoTuristo   Извините за Canvas, действительно пропустил, но Pa...   7.02.2011 9:26
volvo   TPaintBox так устроен, что не хранит изображение, ...   7.02.2011 9:49
RussoTuristo   Спасибо за разъяснение, запомню и переделаю, в при...   7.02.2011 9:56
TarasBer   > Извините за Canvas, действительно пропустил, ...   7.02.2011 10:29
RussoTuristo   Вместо Paintbox взял Image, всё отрисовывается хор...   7.02.2011 16:37
TarasBer   А ты задай MyRect побольше (или поменьше) раз в 10...   7.02.2011 16:57
RussoTuristo   Действительно, ошибок не выдает, но это не значит,...   7.02.2011 17:19
TarasBer   Кто так сортировку пишет? У тебя она неправильно с...   7.02.2011 17:46
RussoTuristo   Насчет изображения понял... Почему-то такие глобал...   7.02.2011 18:00
RussoTuristo   Помогите, пожалуйста, с удалением изображения, Img...   8.02.2011 8:54
TarasBer   Create-Free, а не Create-Destroy. Опять невнимате...   8.02.2011 10:27
RussoTuristo   Free тоже самое выдает, я пробовал....   8.02.2011 10:51
TarasBer   Покажи, как ты этот Free вызываешь?   8.02.2011 11:13
RussoTuristo   img.free; первым делом при нажатии кнопки... Пробо...   8.02.2011 11:32
TarasBer   Ты создаёшь img при создании формы, а уничтожаешь ...   8.02.2011 11:38
RussoTuristo   Форма-то заново не создается и не уничтожается, де...   9.02.2011 10:06
TarasBer   > Без ошибок и без результатов. Какой результа...   9.02.2011 11:02
RussoTuristo   Чтобы при нажатии кнопки BitBtn1 старое изображен...   11.02.2011 11:37
TarasBer   > Чтобы при нажатии кнопки BitBtn1 старое изобр...   11.02.2011 11:44
RussoTuristo   Я так понимаю, речь идёт об этой строке, но изобр...   11.02.2011 11:50
TarasBer   > Я так понимаю, речь идёт об этой строке, но и...   11.02.2011 12:08
RussoTuristo   Вроде доработал все, изображение строится, сжимает...   12.02.2011 17:08
-TarasBer-   > о при расчете вылетает ошибка: "EConverE...   12.02.2011 17:25
RussoTuristo   В поля text у Edit3, Edit4 и Edit7 введены значени...   12.02.2011 17:51
-TarasBer-   > В поля text у Edit3, Edit4 и Edit7 Ты хоть с...   12.02.2011 18:24
RussoTuristo   http://delphi-manual.ru/edit.php А что с text не т...   12.02.2011 19:02
volvo   Значит, где-то в обработчиках чего-то лишнего пона...   12.02.2011 20:16
RussoTuristo   Вот проект без ЕХЕшников: Заранее спасибо.   12.02.2011 20:37
volvo   OMG... :blink: А ничего, что Edit3 и Form1.Edit...   12.02.2011 20:49
RussoTuristo   Спасибо, уверен был, что там косяк, но не знал куд...   13.02.2011 7:52
RussoTuristo   Снова здравствуйте, в процессе работы программы мн...   20.02.2011 12:36
RussoTuristo   Помогите, пожалуйста с кое-чем: Рассматривается оп...   21.02.2011 18:11
-TarasBer-   > 2)Вычисляем по формуле производную и получаем...   21.02.2011 18:54
RussoTuristo   По формуле производной, хотя уже сомнения закралис...   21.02.2011 19:01
-TarasBer-   > -dy/dt=2y/5+(2/5+7) > -dy/dt=2y/5 А чё, 2...   21.02.2011 20:03
RussoTuristo   Школу давно закончил, но с математикой всегда были...   22.02.2011 11:56
TarasBer   > Пытаюсь разобраться, но чёто везде примеры ле...   22.02.2011 12:29
RussoTuristo   Добрый вечер! Снова нужна помощь форума, помог...   1.05.2011 20:16
IUnknown   Проходи в одной процедуре по всем компонентам, и п...   1.05.2011 21:33
RussoTuristo   Спасибо. сохранение и загрузка происходит, только ...   2.05.2011 11:10
IUnknown   Перед тем, как очищать память, надо знать, как эта...   2.05.2011 13:16
TarasBer   > если выделял конструктором какого-то класса -...   2.05.2011 15:22
IUnknown   Ну, что есть - то есть... По мне - так лучше я рук...   2.05.2011 15:30
TarasBer   > По мне - так лучше я руками соберу там, где э...   2.05.2011 16:21
IUnknown   Если б я хотел сказать shared_ptr, я бы сказал ...   2.05.2011 16:30
RussoTuristo   Извините, код громоздкий, но всё же выложу, не пон...   2.05.2011 16:45
IUnknown   Ты б лучше запаковал весь проект и выложил сюда, а...   2.05.2011 17:06
RussoTuristo   Код программы прикрепил, удалить то длинное сообще...   2.05.2011 17:10
IUnknown   Это уже вопрос не ко мне... А в программе у тебя ...   2.05.2011 17:24
RussoTuristo   У меня такое сообщение вылетает, когда я раза 3-4 ...   2.05.2011 17:36
IUnknown   Так... Во-первых, Buffer типа TImage, можно убрать...   2.05.2011 17:57
RussoTuristo   Спасибо большое, понял в чем ошибка с графиками, 2...   2.05.2011 18:30
-TarasBer-   Нет. Буферу надо выделять память только один раз. ...   2.05.2011 18:57
IUnknown   Нужно, а не можно. Очистить. Значит, не везде поп...   2.05.2011 18:58
RussoTuristo   Спасибо большое, графики отображаются, сейчас займ...   2.05.2011 19:09
IUnknown   RussoTuristo, ты не думал никогда над тем, что чем...   3.05.2011 11:02
RussoTuristo   Дельные замечания, поработаю над исправлением, в б...   4.05.2011 13:32
TarasBer   edit15... Хм, что бы это могло быть... Наверное, э...   4.05.2011 14:01
IUnknown   То, что Дельфи останавливается на строке с edit15....   4.05.2011 14:05
RussoTuristo   Спасибо, исправил, теперь сохраняется и загружаетс...   4.05.2011 14:11
RussoTuristo   Пишу функцию, чтобы в поля нельзя было вводить нед...   4.05.2011 15:46
TarasBer   Нафига ты используешь with, если внутри него всё р...   4.05.2011 15:59
IUnknown   function Tf_main.Vvod_dannih : boolean; var i, ...   4.05.2011 16:02
RussoTuristo   Спасибо, DecimalSeparator видел в интернете, но че...   4.05.2011 16:04
IUnknown   С чего бы? Ты хочешь оставить фокус в том Edit-е, ...   4.05.2011 16:25
RussoTuristo   Первая понял в чем - я не все Editы просматривал, ...   4.05.2011 16:31
IUnknown   Не совсем. Первая - это то, что у тебя есть другое...   4.05.2011 16:55
TarasBer   Я бы делал проверку на корректность содержимого не...   4.05.2011 16:56
IUnknown   Не льсти себе, я твой пост не перебивал. Я даже не...   4.05.2011 17:02
RussoTuristo   Добрый день! Подскажите, пожалуйста, а можно л...   8.05.2011 12:00
-TarasBer-   В тестовый? Нет. На то он и текстовый. Можно в во...   8.05.2011 12:12
IUnknown   Выше уже сказали, что в текстовый - нет. А просто ...   8.05.2011 12:44
RussoTuristo   А как сохранить Chart и Image в вордовский фал, мо...   8.05.2011 15:49
IUnknown   У приложения Word есть коллекция InlineShapes, к к...   8.05.2011 16:22
IUnknown   Хотя... Что тебе надо делать с этим изображением? ...   8.05.2011 16:49
RussoTuristo   Мне надо вывести отчет о задымленности в файл, то ...   10.05.2011 6:22
TarasBer   > AddOLEObject(ClassType:='Paint.Picture...   10.05.2011 10:13
IUnknown   С чего бы? Я ж ясно написал: Или удалить надо было...   10.05.2011 11:16
TarasBer   > Или удалить надо было до сохранения? Или надо...   10.05.2011 11:22
IUnknown   Ну, как-то вот так (набираю прямо здесь, так что г...   10.05.2011 12:00
2 страниц V  1 2 >


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 7.07.2025 12:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"