Вопрос № 40470: Уважаемые эксперты! У меня такая возникает ошибка при загрузки формы из dll, при чем если загружать вторую форму из тойже dll то ок, а первую ни в какую и выдает ошибку: class EOleSysError with message "Не был произведен вызов CoInitialize"...Вопрос № 40514: Здравствуйте! Необходимо отсортировать StringGrid по двум столбцам Col1 и Col2 (в них хранятся даные целого типа) таким образом, что если если значения в столбце
Col1 совподают, тогда сравнивать по второму.
Как, в этом случае, сортировать? Пожалу...Вопрос № 40518: Здравствуйте уважаемые Эксперты!
Вопрос теоретически-практический :)
Допустим имеется функция (см. приложение)
Нужно ли в начале тела функции ставить result:=true ?
И есть ли разница в написании
If 111 then...
и
If (111=T...
Вопрос № 40.470
Уважаемые эксперты! У меня такая возникает ошибка при загрузки формы из dll, при чем если загружать вторую форму из тойже dll то ок, а первую ни в какую и выдает ошибку: class EOleSysError with message "Не был произведен вызов CoInitialize"! В чем ошибка? Форма 1 у мени рабочая! Заранее спасибо!
И еще вопрос: Как можно передать из dll обработанные данные в учу файл или другю dll?
Отвечает: sir henry
Здравствуйте, Грицай Алексей Юрьевич!
Видимо Вы используете форму с OLE объектом. По крайней мере это исходит из ошибке. Перед тем, как этот объект использовать, нербходимо сначала инициализировать COM-библиотеку с помощью функции CoInitialize().
Опять же, предположительно, рабочая форма у Вас только в Дельфи, т.к. при этом в код заносятся автоматом все необходимые функции из VCL. В DLL'ке этих функций нет, поэтому Вам инициализацию COM нужно запустить вручную до вызова формы.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 17.04.2006, 06:56 Оценка за ответ: 4
Вопрос № 40.514
Здравствуйте! Необходимо отсортировать StringGrid по двум столбцам Col1 и Col2 (в них хранятся даные целого типа) таким образом, что если если значения в столбце Col1 совподают, тогда сравнивать по второму.
Как, в этом случае, сортировать? Пожалуйста, если можно, код программы.
Отправлен: 17.04.2006, 10:51
Вопрос задал: 007Makc (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Latent
Здравствуйте, 007Makc!
посмотрите здесь: там показана сортировка с целыми значениями.
http://www.delphiworld.narod.ru/base/stringgrid_int_sort.html
--------- - Нет ничего невозможного -
Ответ отправил: Latent (статус: 1-ый класс)
Ответ отправлен: 17.04.2006, 13:19
Отвечает: Igp
Здравствуйте, 007Makc!
Вот событие onCompare компонента TListView в одной из моих программ (3 столбика):
Приложение:
Ответ отправил: Igp (статус: 1-ый класс)
Ответ отправлен: 17.04.2006, 14:29
Вопрос № 40.518
Здравствуйте уважаемые Эксперты!
Вопрос теоретически-практический :)
Допустим имеется функция (см. приложение)
Нужно ли в начале тела функции ставить result:=true ?
И есть ли разница в написании
If 111 then...
и
If (111=True) Then...
Заранее благодарен за ответы.
Отвечает: Ерёмин Андрей
Здравствуйте, Дмитрий Александрович!
Result:=True лучше писать, ибо значение по умолчанию может быть не определено - и тогда функция может потерять всякий смысл. Писать условие в скобках или без них - абсолютно никакой разницы, только +2 байта в pas-файл :-)
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Отвечает: sir henry
Здравствуйте, Дмитрий Александрович!
1. У Вас в обязательном порядке должен присутствовать ответ функцции по умолчанию, посколько функция ДОЛЖНА возвращать какое-то значение. Лучше всего поставить Result:=True в самом начале, тогда у Вас будет гарантия, что если условие if по каким либо причинам не пройдет, то у Вас всегда будет тот ответ, который Вы ожидаете.
2. С технической стороны - никакой разницы, т.к. в условии должен быть логический результат, а он у Вас будет как в том, так и в другом случае. Однако Ваша задача при этом, проследить, чтобы логический результат соответствовал логике программы.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 17.04.2006, 12:08 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Kazakh
Здравствуйте, Дмитрий Александрович!
Добавлю:
>>Нужно ли в начале тела функции ставить result:=true ?
можно писать и так имя_функции:=true;
>>Приложение:
>> If Form1.dbedit1.text='2' then Result:=False
Проще и понятней и меньше кода, если писать так:
Result:=Form1.dbedit1.text='2';
Тогда в Result железно будет значение или True или False.
Да, ещё, имя функции должно начинаться с латинской буквы :-)
--------- Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 6-ой класс)
Ответ отправлен: 17.04.2006, 12:38 Оценка за ответ: 5 Комментарий оценки: Спасибо! Действительно так понятнее.
Отвечает: Полховский Александр Владимирович
Здравствуйте, Дмитрий Александрович!
Я всё же добавлю. Result:=true писать не обязательно, если в конце функции Вы обязательно присвоите ей какое-либо значение (будь то в конструкции if-then-else или в любой другой части кода). В вашем случае необходимо писать: If Form1.dbedit1.text='2'
then Result:=False
else Result:=True;// ну или как написал эксперт Kazakh
Иначе при несовпадении текста функция будет иметь непредсказуемый результат. А так она получит true.
Не совсем в тему, но полезно: Result также используют вместо имени функции (a111, напирмер), чтобы можно было использовать текущее временное значение функции для каких-то рассчётов. Например:
a111:=result*2;// тут мы удваиваем результат функции
Нельзя в подобных случаях (т.е. когда нам нужен текущий результат функции) использовать имя функции в правой части выражения, ибо это будет рекурсивный вызов (вызов функции из самой себя):
a111:=2*a11;//В этом случае функция запустится рекурсивно и пойдёт ещё один цикл расчётов
Про скобки: разницы нет, за исключением одного момента:
при использовании if a111 then... проверяется только значение функции, а при использовании if a111=true then... проверяется ещё и совпадение значения функции с выражением справа, то есть, выполняется не одно сравнение, а 2. Но это незначительно.
--------- Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 17.04.2006, 19:52 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Denisss
Здравствуйте, Дмитрий Александрович!
1. В Вашем случае Result:= True поставить нужно, иначе функция может вернуть неопределенное значение (это может закончиться либо некорректной работой приложения, либо вызовом различных ошибок).
Но всегда есть способ лучше:
Выражение (Form1.dbEdit1.Text = '2') имеет тип Boolean
Переменная Result имеет тип Boolean,
тогда спрашивается: зачем писать 3-и строчки, когда можно все уместить в одну?:
Result:= (Form1.dbEdit1.Text = '2');
2. Разница есть. Но Delphi интерпретирует обе записи одинаково.
После If должно идти условие - выражение типа Boolean. Функция 111 у Вас уже имеет тип Boolean, тогда сравнивая ее с True, Вы получаете тот же тип Boolean и тоже значение, что и 111. Т.е. правильнее будет писать if 111 then ...., а то можно и так написать:
if (((111 = True) = True) = True) then ...
и все равно программа будет одинаково работать.
Удачи!
Ответ отправил: Denisss (статус: Специалист)
Ответ отправлен: 19.04.2006, 01:03 Оценка за ответ: 5 Комментарий оценки: Спасибо