Графический редактор в Delphi |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Графический редактор в Delphi |
RussoTuristo |
4.05.2011 15:46
Сообщение
#81
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Пишу функцию, чтобы в поля нельзя было вводить недопустимые значения, решил по уму сделать, чтобы сразу всё обрабатывалось, но с синтаксисом проблемки:
function Tf_main.Vvod_dannih:boolean; Как правильно можно обращаться к текстам всех Editов? Подскажите, пожалуйста. Сообщение отредактировано: RussoTuristo - 4.05.2011 15:48 |
TarasBer |
4.05.2011 15:59
Сообщение
#82
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Нафига ты используешь with, если внутри него всё равно обращаешься через Components[i]?
Внимательнее пиши же!
Сообщение отредактировано: TarasBer - 4.05.2011 16:02 -------------------- |
IUnknown |
4.05.2011 16:02
Сообщение
#83
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
function Tf_main.Vvod_dannih : boolean; Почему закомментировал? Потому что у тебя With работает, и просто Text эквивалентно (Components[i] as TEdit).Text. А not надо вынести в начало, он относится к результату выражения (text[j] in ['0'..'9', ',']). Кстати, пользовался бы ты не запятой, а переменной DecimalSeparator - было бы лучше... |
RussoTuristo |
4.05.2011 16:04
Сообщение
#84
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Спасибо, DecimalSeparator видел в интернете, но честно говоря не знал, что это значит.
А если использовать такой синтаксис, то установить фокус уже никак не получится в этот Edit, так как работа идет уже непосредственно с текстом? IUnknown, С днём Рождения, кстати! Сообщение отредактировано: RussoTuristo - 4.05.2011 16:13 |
IUnknown |
4.05.2011 16:25
Сообщение
#85
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
С чего бы? Ты хочешь оставить фокус в том Edit-е, который некорректно заполнен, что-ли? Вот так попробуй:
function Tf_main.Vvod_dannih : boolean;У тебя было 2 трудноуловимых ошибки, кстати... Посмотри внимательно, и поймешь, какие. И в чем опасность. |
RussoTuristo |
4.05.2011 16:31
Сообщение
#86
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Первая понял в чем - я не все Editы просматривал, нумерация-то с нуля идет, а вот вторая связана с длиной текста в Editе походу, но что-то сразу не доходит, в чем её серьёзность...
|
IUnknown |
4.05.2011 16:55
Сообщение
#87
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Не совсем. Первая - это то, что у тебя есть другое свойство Text в контексте этой процедуры. То есть, вставь строку:
Result := False;, и программа откомпилируется нормально. Какое из свойств будет взято после того, как отработает With - то, что доступно и без With, или то, что относится именно к Edit-ам - я в этом не могу быть уверен. Поэтому я от With избавился, и теперь обращение Edit.Text - это 100% обращение к содержимому компонента типа TEdit. Вторая ошибка: индексация в строке начинается с 1, а не с 0. Читать ты, конечно, нулевой символ можешь (хотя я бы и это запретил, меньше ошибок будет, вот именно в этом случае ты бы тут же получил "по рукам", и понял бы, в чем дело. Почему этого не сделают никак - не понимаю), а вот попробовать записать в него что-то - уже не получится. Тут же получишь сообщение, что "0-ой символ недоступен, используйте Length/SetLength". Так что и проверять символы в строке надо с первого, а не с нулевого. Сообщение отредактировано: IUnknown - 4.05.2011 16:57 |
TarasBer |
4.05.2011 16:56
Сообщение
#88
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Я бы делал проверку на корректность содержимого не перебором символов, а через Val. Мне кажется, логичнее проверять, можно ли строку сделать числом, при помощи функции, делающей строку числом.
> а вот вторая связана с длиной текста в Editе походу, но что-то сразу не доходит, в чем её серьёзность... А ты прочитай мой пост (82), который IUnknown перебил с ошибкой в индексации строки. Сообщение отредактировано: TarasBer - 4.05.2011 16:57 -------------------- |
IUnknown |
4.05.2011 17:02
Сообщение
#89
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата мой пост (82), который IUnknown перебил с ошибкой в индексации строки. Не льсти себе, я твой пост не перебивал. Я даже не видел его. Я поправил исходный текст из поста №81. Как выяснилось - не всё увидел. Говорю же, стал бы компилятор материться - обратил бы внимание на то, что там происходит. А так - оно осталось без внимания... Еще один камень в огород Дельфостроителей (про автодеструкторы ты уже говорил) Сообщение отредактировано: IUnknown - 4.05.2011 17:06 |
RussoTuristo |
8.05.2011 12:00
Сообщение
#90
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Добрый день! Подскажите, пожалуйста, а можно ли в текстовый файл вместе с таблицами и Эдитами вывести графики из TChart и рисунок? Есть такая необходимость, про THcart что-то нашел в интернете, попытался наваять, но вместо графиков выводятся названия TChartов, а изображение вообще вызывает сомнения -можно ли ехо сохранить в текстовый файл или только в bmp/jpeg?
procedure Tf_main.N7Click(Sender: TObject); |
-TarasBer- |
8.05.2011 12:12
Сообщение
#91
|
Гость |
В тестовый? Нет. На то он и текстовый.
Можно в вордовый. Можно сохранить картинку в файл, а потом сгенерировать html, в который включена эта картинка. Только лучше не в bmp сохранять, а в png. Правда, как это делать - я не знаю, но вроде есть какое-то стандартное решение. |
IUnknown |
8.05.2011 12:44
Сообщение
#92
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата а можно ли в текстовый файл вместе с таблицами и Эдитами вывести графики из TChart и рисунок? Выше уже сказали, что в текстовый - нет. А просто графику - можно. Либо TChart.SaveToMetafile, либо TChart.SaveToMetafileEnh (про SaveToBitmapFile я не говорю, кому нужен BMP-файл?) |
RussoTuristo |
8.05.2011 15:49
Сообщение
#93
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
А как сохранить Chart и Image в вордовский фал, может кто-нибудь подсказать? А-то что-то ничего в интернете нашарить не могу похожего...
|
IUnknown |
8.05.2011 16:22
Сообщение
#94
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
У приложения Word есть коллекция InlineShapes, к которой и надо добавлять изображение, чтобы оно добавилось в документ. Поскольку и метод AddPicture и метод AddOLEObject этой коллекции требуют имя файла (т.е., файл с изображением уже должен быть на диске), то надо записать картинку во временный файл, оттуда - добавить к документу, а потом - удалить:
fn := ExtractFilePath(Application.ExeName) + 'tmp.bmp'; // Тут будет временная картинкаПотом сохранить DOC файл, и все... Уж этих примеров в сети - море. |
IUnknown |
8.05.2011 16:49
Сообщение
#95
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Хотя... Что тебе надо делать с этим изображением? Сохранить, а потом восстановить? Или просто для просмотре? Если сохранение/восстановление - то можно изображение закодировать в строку (EncodeBase64), а потом, когда нужно - раскодировать назад: DecodeBase64. На форуме embarcadero было решение подобной задачи.
|
RussoTuristo |
10.05.2011 6:22
Сообщение
#96
|
Пионер Группа: Пользователи Сообщений: 80 Пол: Мужской Репутация: 0 |
Мне надо вывести отчет о задымленности в файл, то есть исходные данные, рассчитанные данные, желательно рисунок(не обязательно, чувствую с ним много проблем будет) и графики зависимостей(TChart)....
Кстати, в связи с этим возникает вопрос, а график TChart наверняка выводится по похожим с Image алгоритмам?(То естьTChart нельзя вывести в один файл с Эдитами и таблицами, используя, например не word, а какой-либо более легкий метод вывода) Сообщение отредактировано: RussoTuristo - 10.05.2011 6:55 |
TarasBer |
10.05.2011 10:13
Сообщение
#97
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> AddOLEObject(ClassType:='Paint.Picture',
FileName:=fn, LinkToFile:=False, DisplayAsIcon:=False); Кстати, интересно было, что означает эта конструкция в Дельфи? (хахаха, это спецкостыль для OLE) > WordApp := CreateOleObject('Word.Application'); Ты забыл дописать его удаление, а ведь у них, в отличие от неудалённых указателей, последствия похуже - лишний процесс повиснет в памяти. И ещё, почему у меня не получалось сделать так, чтобы одновременно работала подобная программа и я мог что-то набирать в другом документе (при выборе другого документа моя программа тоже переключалась на него)? -------------------- |
IUnknown |
10.05.2011 11:16
Сообщение
#98
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Ты забыл дописать его удаление С чего бы? Я ж ясно написал: Цитата Потом сохранить DOC файл Или удалить надо было до сохранения? Или надо было написать полный код, чтоб ТС только скопировал и добавил к себе?Цитата почему у меня не получалось сделать так, чтобы одновременно работала подобная программа и я мог что-то набирать в другом документе Потому что я использовал свойства, которые относятся к текущему (активному) документу/приложению. Если надо одновременно работать вручную - с одним документом, а автоматически - с другим, то нужно переписывать код по-другому. Обычно такой задачи не стоит.Цитата (хахаха, это спецкостыль для OLE) Это - костыль? Ты еще работу с OLE в Билдере не видел. Вот там - костыль, так костыль... А в Дельфи - практически повторен стиль VBA.Цитата(RussoTuristo) используя, например не word, а какой-либо более легкий метод вывода Пример более легкого метода, чем Word, можно привести? В Word картинка добавляется одной строкой, как видишь.Сообщение отредактировано: IUnknown - 10.05.2011 11:21 |
TarasBer |
10.05.2011 11:22
Сообщение
#99
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> Или удалить надо было до сохранения? Или надо было написать полный код, чтоб ТС только скопировал и добавил к себе?
Надо было написать "потом сохранить и обязательно удалить не забудь". > Если надо одновременно работать вручную - с одним документом, а автоматически - с другим, то нужно переписывать код по-другому. А насколько именно по-другому? > Ты еще работу с OLE в Билдере не видел. Да, не видел... -------------------- |
IUnknown |
10.05.2011 12:00
Сообщение
#100
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата А насколько именно по-другому? Ну, как-то вот так (набираю прямо здесь, так что где-то могу и накосячить) :// во-первых, создаем OLE-объект только тогда, когда он еще не создан,вот насчет необходимости Selection я не уверен, может быть оно там и не надо. Цитата Да, не видел... Посмотри:С++ Builder6 & Excel Сообщение отредактировано: IUnknown - 10.05.2011 12:01 |
Текстовая версия | 14.05.2024 11:57 |