Графический редактор в Delphi |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Графический редактор в Delphi |
TarasBer |
11.02.2011 12:08
Сообщение
#41
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Я так понимаю, речь идёт об этой строке, но изображение всё равно не сжимается, а часть его остается где-то за пределами....
Да, об этой. Она именно выводит то, что было в Img на форму. То, что там что-то за пределами - ну так что было в Img, то и вывелось. Можешь написать для контроля Img.SvaeToFile() и сравнить. > При нажатии кнопки первым делом удаляем старое, и строим новое. Что-то я не увидел, чтобы ты создавал новое при нажатии кнопки. У тебя, видимо полное непонимание происходящего. TBitmap.Create - это создание изображения для работы, если этого не сделать, то с ним ничего делать нельзя. Эта процедура соответствует доставанию нового листа бумаги из стола. TBitmap.Free - это не стереть изображение ластиком с листа! Это выкинуть лист в мусорку, потому что тебе он больше не нужен. После Free делать с изображением ничего нельзя, поэтому его лучше пропиши в OnDestroy. Всякие там рисования - это не создание нового листа, это рисование на текущем. А для того, чтобы стереть изображение ластиком, делай так:
А потом, перед рисованием, не забудь обратно написать Pen.Style := psSolid; (а потом он линии рисовать не будет). -------------------- |
RussoTuristo |
12.02.2011 17:08
Сообщение
#42
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Вроде доработал все, изображение строится, сжимается/растягивается, но как-то иногда очень криво, что-то не прорисовывается, когда изображение большое - иногда целые линии не видны. Увеличил размер кисти, стало лучше, даже нормально, но это, наверное, не правильный способ.... Можно как-то по-другому это реализовать - улучшить качество?
И еще вопрос, добавил панель для расчетов, поместил Editы, туда ввожу значения, но при расчете вылетает ошибка: "EConverError with message "" is not a vali floating point value". Незаполненных Editов нету, странно... Хотя типы должны совпадать: Qn, Vlin,r:real; Сообщение отредактировано: RussoTuristo - 12.02.2011 17:08 |
-TarasBer- |
12.02.2011 17:25
Сообщение
#43
|
Гость |
> о при расчете вылетает ошибка: "EConverError with message "" is not a vali floating point value".
Это не значит, что он не заполнен. Это значит, что его содержимое - не число. Кстати, в качестве разделителя нужна именно запятая (кажется). > что-то не прорисовывается, когда изображение большое - иногда целые линии не видны Функцию сжатия писал Микрософт. Видать, хреново написал. У меня тоже при сжатии вместо оттенков серого просто пропадают линии, даже если принудительно задать режим сжатия halftone . > Можно как-то по-другому это реализовать - улучшить качество? Да. Изначально задать размер буфера, совпадающий с размером выводимого участко и при рисовании в буфер использовать только относительные координаты, никаких точных чисел. То есть делать так: w := Img.Width; h := Img.Height; ... LineTo(round(w * 0.1), round(h * 0.34)); (для первой координаты через w, для второй через h). |
RussoTuristo |
12.02.2011 17:51
Сообщение
#44
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
В поля text у Edit3, Edit4 и Edit7 введены значения 1380, 10 и 10 соответственно без запятых и без пробелов, поле для вывода - пустое.
Вообще когда добавил 2-ю панель она как не родная))) С первой панели из такого же Edita считывается, а эта панель вообще мёртвая почему-то.... Хотя они по сути идентичные. |
-TarasBer- |
12.02.2011 18:24
Сообщение
#45
|
Гость |
> В поля text у Edit3, Edit4 и Edit7
Ты хоть сам помнишь, что они означают? Возьми редактор свойств объектов и исправь им значение поля Name на нормальное. Да, пустое поле тоже вызывает ошибку при попытке перевести в число. Кстати, я в таких случаях делаю примерно так:
|
RussoTuristo |
12.02.2011 19:02
Сообщение
#46
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
http://delphi-manual.ru/edit.php А что с text не так? Я всегда так делал, да и в учебниках так написано.
Спасибо за функцию, думаю пригодится в будущем, только прибавить к ней немного кода на запрет значений, кроме числовых и ","... и вместо caption, наверное, text, а-то что-то не сходится.... Procedure Init; Даже так не работает, когда вероятность попадания чего-то ненужного исключена. |
volvo |
12.02.2011 20:16
Сообщение
#47
|
Гость |
Значит, где-то в обработчиках чего-то лишнего понавешал. На пустом проекте прекрасно отработала процедура Init. Прикрепляй свой проект целиком (только не надо EXE-шники и все временные файлы пихать, ладно? Скомпилировать я и сам могу, меня исходники интересуют)
|
RussoTuristo |
12.02.2011 20:37
Сообщение
#48
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Вот проект без ЕХЕшников:
Заранее спасибо. Прикрепленные файлы 2.rar ( 12.51 килобайт ) Кол-во скачиваний: 189 |
volvo |
12.02.2011 20:49
Сообщение
#49
|
Гость |
OMG...
А ничего, что Edit3 и Form1.Edit3 (и так далее) - это разные вещи? Убери напрочь этот свой "страшный Var" (у тебя ж сейчас все переменные, описанные там - NIL-ы, не инициализированные они), и сделай Init методом TForm1, тогда все будут всё видеть... TForm1 = class(TForm) |
RussoTuristo |
13.02.2011 7:52
Сообщение
#50
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Спасибо, уверен был, что там косяк, но не знал куда пихнуть метод Init в заголовочную часть....
|
RussoTuristo |
20.02.2011 12:36
Сообщение
#51
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Снова здравствуйте, в процессе работы программы мне необходимо вычислить производную функции, наткнулся на форуме на "Процедурные типы и переменные". Возник вопрос: Для вычисления производной не обязательно писать объёмного кода, есть встроенные решения или я не так понял эту статью?
|
RussoTuristo |
21.02.2011 18:11
Сообщение
#52
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Помогите, пожалуйста с кое-чем:
Рассматривается определенный физический процесс, с течением времени изменяются 2 величины, в упрощенном виде выглядит так: G=a(y+b) -dy/dt=G/c+d; a,b,c,d известны, G и y - искомые величины. Я с математикой дружу плохо, поэтому хотелось бы услышать совет знающих людей... Необходимо ли вообще вычислять производную или нет? Глупый вопрос, но серьёзно меня тормозит... С первым уравнением всё понятно, а вот втором - dy/dt и даже не знаю как к этому подступиться... Мои рассуждения: 1)Подставляем первое уравнение во второе и получаем: -dy/dt=a(y+b)/c+d 2)Вычисляем по формуле производную и получаем: y=a/c 3)Подставляем у в первую формулу Что-то больно легко получается, но правильно ли это? Вообще производная ли это как таковая? Знакомых математиков особо нет, помогите, пожалуйста. |
-TarasBer- |
21.02.2011 18:54
Сообщение
#53
|
Гость |
> 2)Вычисляем по формуле производную и получаем: y=a/c
Как ты это сделал? |
RussoTuristo |
21.02.2011 19:01
Сообщение
#54
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
По формуле производной, хотя уже сомнения закрались:
-dy/dt=2(y+3)/5+7 -dy/dt=2y/5+(2/5+7) -dy/dt=2y/5 По формуле получаем -2/5 Или выражение -dy/dt=2y/5 не равно -(2y/5)'? |
-TarasBer- |
21.02.2011 20:03
Сообщение
#55
|
Гость |
> -dy/dt=2y/5+(2/5+7)
> -dy/dt=2y/5 А чё, 2/5+7 уже считается нулевым? > -dy/dt=2y/5 > По формуле получаем -2/5 По какой формуле?! Как можно из левой части сократить d/dt, а из правой y? Ты в каком классе учишься? Если у вас не было курса дифуров, то я тебе это решу, если был, то читай конспекты. |
RussoTuristo |
22.02.2011 11:56
Сообщение
#56
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Школу давно закончил, но с математикой всегда были проблемы...
Пытаюсь разобраться, но чёто везде примеры легкие и без этих примудростей с d/dt, окунаюсь в тёмный лес... Если это плёвое дело - помоги, пожалуйста... |
TarasBer |
22.02.2011 12:29
Сообщение
#57
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Пытаюсь разобраться, но чёто везде примеры легкие и без этих примудростей с d/dt
ДИФУР без этих "прИмудростей"? Такие вообще бывают? Ты примеры из какой главы смотрел? Надо по дифурам смотреть, а не просто по алгебраическим уравнениям. -------------------- |
RussoTuristo |
1.05.2011 20:16
Сообщение
#58
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Добрый вечер! Снова нужна помощь форума, помогите, пожалуйста:
У меня есть форма, на которой расположены StringGrid, куча Editов и еще компоненты. Как можно сделать сохранение введенных значений, чтобы одновременно, в один файл сохранялись StringGrid и Editы? Наткнулся в интернете на чьи-то комментарии, попытался переделать, но что-то у меня ничего путного не выходит...
Этот код у меня не получается адаптировать к своей программе, да и сохранение здесь идет в несколько заранее заданных файлов, моя программа, кстати, ниже есть... Может есть другие способы или это кто-то знает как подключить? Сообщение отредактировано: RussoTuristo - 1.05.2011 20:18 Прикрепленные файлы ______.rar ( 33.16 килобайт ) Кол-во скачиваний: 150 |
IUnknown |
1.05.2011 21:33
Сообщение
#59
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Проходи в одной процедуре по всем компонентам, и пиши все в один файл:
procedure TForm1.SaveToFile(const FileName: TFileName);А потом из него и читай. В обратном порядке. |
RussoTuristo |
2.05.2011 11:10
Сообщение
#60
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Спасибо. сохранение и загрузка происходит, только вот программа содержит очень много сложных расчетов с большой точностью и числами, после нескольки расчетов вылетает ошибка о нехватке памяти.
Знаю, что переменные можно очищать с помощью dispose(); Но переменных в памяти очень много, можно ли каким-либо образом очистить всю память, занимаемую программой? И еще, подскажите, пожалуйста, что делаю не так: Есть TChart1, содержащий Series1, есть StringGrid, в который выводятся данные расчета, мне необходимо сделать график зависимости между несколькими величинами из таблицы: procedure Tf_main.Grafiki; Почему-то график пустует, хотя ко времени вызова StrinGrid уже заполняется и в Edit почему-то пишется значение 0. Это может быть из-за того, что числа в колонках большие: 5 знаков до запятой и 5 после? Или я просто неправильно пишу код процедуры? |
Текстовая версия | 29.04.2024 4:22 |