Вопрос № 32179: Здравствуйте!
Подскажите в чем ошибка
В ходе программы могут получиться пустые строки, я их хочу убрать. Пишу:
if tabl.Cells[1,i]='' and tabl.Cells[2,i]='' then
Tabl.RowCount:=Tabl.RowCount-1;
На что мне пишут...
[Error] Vvod...Вопрос № 32183: Всем привет!
Возник вопрос:
в таблицу StringGrid ввожу координаты точек. А на Image.Canvas строятся окружности по этим координатам. Необходимо организовать такое дейстивие, что при выборе ячейки в таблице, окружность бы меняла свой цвет. Проб...Вопрос № 32213: Здравствуйте уважаемые эксперты!
Стыдно спрашивать такой простой вопрос, но придется: как эмулировать нажатие в системе клавиш CTRL+F ?
Зарание спасибо!
...Вопрос № 32214: Здравсвуйте!
Пытаюсь заполнить таблицу из текстового фала 1.txt содержание которого следующее:
10 10
20 20
30 30
40 40
пишу:
var
Form1: TForm1;
fname:string;
f:TextFile;
s,x,y:array of extended;
<...Вопрос № 32216: Всем привет!
А кто знает, что если в редакторе кода зажать Alt и набрать 010 на цифровой клавиатуре, то появится список часто используемых синтаксических конструкций с возможностью вставки? Прикольно, правда? Случайно нашёл......Вопрос № 32224: Здравствуйте!
В каком порядке происходят события при создании и показе окна?...Вопрос № 32226: Я не понимаю WinAPI. У вас не найдется книга или статья. Заранее спасибо...Вопрос № 32227: Как программно 'открыть' TComboBox?...Вопрос № 32238: Посоветуйте что-нибудь простое как Zippit
(http://www.torry.net/samples/samples/compression/Zippit-0.0.1.zip), но для извлечения файлов из zip архива....
Вопрос № 32.179
Здравствуйте!
Подскажите в чем ошибка
В ходе программы могут получиться пустые строки, я их хочу убрать. Пишу:
if tabl.Cells[1,i]='' and tabl.Cells[2,i]='' then
Tabl.RowCount:=Tabl.RowCount-1;
На что мне пишут...
[Error] VvodXY.pas(145): Operator not applicable to this operand type
Как быть? :(
Отвечает: Маренич Владимир
Здравствуйте, Артемова Марина!
Вместо
if tabl.Cells[1,i]='' and tabl.Cells[2,i]='' then
напишите
if (tabl.Cells[1,i]='') and (tabl.Cells[2,i]='') then
Дело в том, что приоритет выполнения оператора AND выше сравнения (=,<,> и.т.д.). Поэтому компилятор пытался "склеить" '' и tabl... Вот и ругается, что низя такое клеить...
Удачи в изучении PASCAL :)
Ответ отправил: Маренич Владимир (статус: 9-ый класс)
Отправлен: 26.12.2005, 00:10
Отвечает: Schmak
Здравствуйте, Артемова Марина!
Ну дак правильно, что Delphi выдаёт ошибку, потому что правильно будет так:
if (tabl.Cells[1,i]='') and (tabl.Cells[2,i]='') then
ps. Хочу заранее предупредить что при удалении строк таким перебором следует использовать не for, а while или repeat..until, т.к. при удалении кол-во строк уменьшается => перебор нужно делать не до конца.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 26.12.2005, 05:45
Отвечает: sir henry
Здравствуйте, Артемова Марина!
В Дельфи если у Вас приоритет операций другой, чем по умолчанию, необходимо ставить скобки. По умолчанию приоритет AND выше, чем приоритет операций сравнения, следовательно он выполняется в первую очередь. Сделайте так:
if (tabl.Cells[1,i]='') and (tabl.Cells[2,i]='')
тогда у Вас сначала выполнятся операторы в суобках (сравнение) а потом уже два выражения объеденятся по AND.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.12.2005, 06:41
Отвечает: Ерёмин Андрей
Здравствуйте, Артемова Марина!
Согласно правилам Object Pascal, при составлении сложных условий, состоящих из двух и более простых, простые условия следует брать в скобки:
if (tabl.Cells[1,i]='') and (tabl.Cells[2,i]='') then
Tabl.RowCount:=Tabl.RowCount-1;
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 07:46
Вопрос № 32.183
Всем привет!
Возник вопрос:
в таблицу StringGrid ввожу координаты точек. А на Image.Canvas строятся окружности по этим координатам. Необходимо организовать такое дейстивие, что при выборе ячейки в таблице, окружность бы меняла свой цвет. Пробую это сделать с помощью On SelectCell в результате он дает ввести мне только первую точку и после этого вылетает программа с сообщением о плавающей точке. В чем ошибка?
Отправлен: 26.12.2005, 00:39
Вопрос задал: Lazut4ik (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Schmak
Здравствуйте, Lazut4ik!
Точки на канве имеют координаты целого типа, а раз вылетает ошибка операции с плавающей запятой, то скорее всего вы пытаетесь обратиться к точке с вещественными координатами, что конечно же недопустимо.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 26.12.2005, 05:49
Отвечает: sir henry
Здравствуйте, Lazut4ik!
А кто будет код приводить? Здесь мысли читать не умеют.
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.12.2005, 06:44
Вопрос № 32.213
Здравствуйте уважаемые эксперты!
Стыдно спрашивать такой простой вопрос, но придется: как эмулировать нажатие в системе клавиш CTRL+F ?
Зарание спасибо!
Отправлен: 26.12.2005, 12:24
Вопрос задал: Lexus (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ерёмин Андрей
Здравствуйте, Lexus!
Используем API-функцию keybd_event:
Не забывайте при этом, что данный код имитирует нажатие комбинации Ctrl+F на клавиатуре и передано оно будет активному приложению, поэтому, если вы хотите посылать нажатие другому окну, нужно его сначала активировать.
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 13:07 Оценка за ответ: 5
Отвечает: Rusland
Здравствуйте, Lexus!
Проблема только в эмуляции нажатия клавиш? Тогда смотрите код в приложении.
Приложение:
--------- Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Специалист)
Отправлен: 26.12.2005, 13:07 Оценка за ответ: 5
Отвечает: Лучников Юрий Владимирович
Здравствуйте, Lexus!
Думаю посылкой MESSAGE нужному оконному объекту;)
Успехов!
--
Советую плотнее общаться с MSDN (msdn.microsoft.com) ;)
Ответ отправил: Лучников Юрий Владимирович (статус: 7-ой класс)
Отправлен: 26.12.2005, 16:35 Оценка за ответ: 3
Вопрос № 32.214
Здравсвуйте!
Пытаюсь заполнить таблицу из текстового фала 1.txt содержание которого следующее:
10 10
20 20
30 30
40 40
пишу:
var
Form1: TForm1;
fname:string;
f:TextFile;
s,x,y:array of extended;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
fname:=OpenDialog1.FileName;
assignfile(f,fname);
reset(f);
SetLength(x,Length(x)+1);
SetLength(y,Length(y)+1);
SetLength(s,Length(s)+1);
i:=0;
while not EOF(f) do
begin
read(f,s[i]);
if frac(i/2)=0 then
begin
x[i]:=s[i];
tabl.Cells[0,i+1]:=floattostr(x[i]);
end
else
begin
y[i]:=s[i];
tabl.Cells[1,i+1]:=floattostr(y[i]);
end;
inc(i);
end;
end;
end;
Выдает ошибку:
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0045D74C.....
В чем может быть дело?
Отвечает: Zubex
Здравствуйте, Артемова Марина!
Ой! Зачем такие сложности?... Три динамических массива для того, чтобы заполнить StringGrid... Это чересчур!!!
Делайте так (приложение)
Теперь по Вашему коду:
1. SetLength(...,Length(...)+1) надо делать в каждом витке цикла;
2. По окончании заполнения таблицы следовало бы закрыть файл: CloseFile(f);
Приложение:
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 4-ый класс)
Отправлен: 26.12.2005, 13:21
Отвечает: sir henry
Здравствуйте, Артемова Марина!
1. Ошибка, скорее всего, здесь:
Length(x)
У вВас еще память под массив не выделена, а Вы уже пытаетесь его длину получить и вдобавок прибавить к несуществующей цифре еденицу.
2. Вы пользуетесь переменными, которые не объявили (i).
3. У Вас данные в файли типа Integer, зачем для их считывания Вы используете тип Extended?
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.12.2005, 13:21
Отвечает: Ерёмин Андрей
Здравствуйте, Артемова Марина!
Честно говоря, странный у вас код... Много всего лишнего. Можно обойтись и без использования динамических массивов, сократив длину самого кода в два раза:
var Form1: TForm1;
fname:string;
f:TextFile;
i: integer;
tmp: real;
procedure TForm1.Button1Click(Sender: TObject);
begin if OpenDialog1.Execute then begin fname:=OpenDialog1.FileName;
assignfile(f,fname);
reset(f);
i:=0;
while not EOF(f) do begin read(f,tmp);
tabl.Cells[0,i]:=floattostr(tmp);
read(f,tmp);
tabl.Cells[1,i]:=floattostr(tmp);
inc(i);
end;
closefile(f);
end;
end;
Не забудьте, что перед этим в StringGrid должны быть соответствующие ячейки (свойства ColCount и RowCount).
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 13:56
Отвечает: Schmak
Здравствуйте, Артемова Марина!
Зачем так сложно? По-моему так легче, а результат, я думаю, тот самый:
var
fname:string;
f:TextFile;
procedure TForm1.Button1Click(Sender: TObject);
var a,b:Extended;
i:integer;
begin
if OpenDialog1.Execute then
begin
fname:=OpenDialog1.FileName;
assignfile(f,fname);
reset(f);
i:=0;
while not EOF(f) do
begin
read(f,a,b);
if tabl.RowCount=i then tabl.RowCount:=i+1;
tabl.Cells[0,i]:=floattostr(a);
tabl.Cells[1,i]:=floattostr(b);
inc(i);
end;
closefile(f);
end;
end;
end.
PS Кстати лучше занести объявление текстового файла в обработчик событий.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 26.12.2005, 16:40
Отвечает: Jadd
Здравствуйте, Артемова Марина!
if frac(i/2)=0 then
begin
x[i]:=s[i];
tabl.Cells[0,i+1]:=floattostr(x[i]);
end
else
begin
y[i]:=s[i];
tabl.Cells[1,i+1]:=floattostr(y[i]);
end;
тут нужно проверять на предмет выхода значения i за пределы массива, т.е. if (i+1) = Length(s) then и не обрабатывать эту итерацию или не делать операции с элементом массива i+1.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Специалист)
Отправлен: 26.12.2005, 16:49
Вопрос № 32.216
Всем привет!
А кто знает, что если в редакторе кода зажать Alt и набрать 010 на цифровой клавиатуре, то появится список часто используемых синтаксических конструкций с возможностью вставки? Прикольно, правда? Случайно нашёл...
Отвечает: Zubex
Здравствуйте, Ерёмин Андрей!
Точно прикольно, попробовав, нашел еще:
Alt + 06 - поиск;
Alt + 018 - замена;
А список часто используемых синтаксических конструкций вызывается также CTRL + J
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 4-ый класс)
Отправлен: 26.12.2005, 13:43 Оценка за ответ: 5 Комментарий оценки: Не сомневаюсь, что в Delphi ещё полно пасхалок. Ещё есть специальный параметр, запустив delphi32.exe с которым, вместо обычного логотипа загрузки будет фотография разработчиков. ;)
Отвечает: REFERI
Здравствуйте, Ерёмин Андрей!
Читал про такое - только смысл в этом немножко другой - это не для того сделано чтобы часто используемые конструкции выводить, а как средство автоматизации - автозаполнение. Например пишем tr затем жмем комбинацию и появляются варианты - нажимаем Enter и вся конструкция расписана! Такое и в билдере тоже по-моему есть...
А вообще по этому поводу не мешало бы создать ветку в форуме что-ли...
Потому сам тоже часто нахожу к-нить интересные фишки и хочется поделиться этим с другими читателями, но в вопрос это посылать как-то неуместно. Так что
давайте все сливать на форум!
До встречи!
--------- Не судите, да не судимы будете...
Ответ отправил: REFERI (статус: Студент)
Отправлен: 26.12.2005, 23:19 Оценка за ответ: 5 Комментарий оценки: Вот я и создал вчера рассылку... :) Читайте в новостях.
Вопрос № 32.224
Здравствуйте!
В каком порядке происходят события при создании и показе окна?
Отправлен: 26.12.2005, 15:19
Вопрос задал: SuperXakep (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Dushin Igor
Здравствуйте, SuperXakep!
Если я правильно понял вопрос, то вот так:
onCreate
onShow
onPaint
onActivate
onResize
onPaint(снова!)
--------- Старый глюк лучше новых двух!
Ответ отправил: Dushin Igor (статус: 1-ый класс)
Отправлен: 26.12.2005, 15:26 Оценка за ответ: 5
Отвечает: Ерёмин Андрей
Здравствуйте, SuperXakep!
Вот в таком порядке:
OnCreate
OnShow
OnPaint
OnActivate
OnResize
OnPaint --------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 15:36 Оценка за ответ: 5
Отвечает: sir henry
Здравствуйте, SuperXakep!
Примерно в таком:
- OnCreate
- OnShow
- OnPaint
- OnActivate
- OnResize
- OnPaint
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.12.2005, 15:51 Оценка за ответ: 5
Отвечает: Schmak
Здравствуйте, SuperXakep!
Если не ошибаюсь, то так:
OnCreate
OnShow
OnPaint
OnActivate
OnResize
OnPaint
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 26.12.2005, 16:40
Вопрос № 32.226
Я не понимаю WinAPI. У вас не найдется книга или статья. Заранее спасибо
Отправлен: 26.12.2005, 15:55
Вопрос задал: E.T.T (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ерёмин Андрей
Здравствуйте, E.T.T!
Что именно вам непонятно? API (Application Programming Interface) - это функции, которые можно использовать в любом языке программирования, т.к. берутся они из Windows. Справочник по API-функциям есть и в дистрибутиве Delphi:
Пуск - Программы - Borland Delphi - Help - MS SDK Help Files - Win32 SDK Reference.
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 16:02 Оценка за ответ: 1
Отвечает: sir henry
Здравствуйте, E.T.T!
Это очень большая книга (три CD-ROM'а), поэтому ни о какой статье и речи быть не может. Вот ссылка:
http://msdn.microsoft.com
Лучше сходить на барахолку и купить диски.
Русская версия, очень убогая, но как справочник годится:
http://www.softodrom.ru/win/ap/p3218.shtml
Ответ отправил: sir henry (статус: Академик)
Отправлен: 26.12.2005, 16:32
Отвечает: Zubex
Здравствуйте, E.T.T!
Советую почитать Джеффри РИХТЕР "Windows для профессионалов".
Когда поймете как работает Windows, тогда и Win-API поймете...
--------- Если не знаешь что сказать - лучше промолчи...
Ответ отправил: Zubex (статус: 4-ый класс)
Отправлен: 26.12.2005, 17:49 Оценка за ответ: 3
Отвечает: Сазонов Михаил Владимирович
Здравствуйте, E.T.T!
У меня есть книга Румянцева (в формате PDF 18 М). Мыльте мне я ее вышлю Вам.
Отправлен: 26.12.2005, 16:08
Вопрос задал: SuperXakep (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Rusland
Здравствуйте, SuperXakep!
См. приложение
Приложение:
--------- Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Специалист)
Отправлен: 26.12.2005, 16:13 Оценка за ответ: 5
Отвечает: Ерёмин Андрей
Здравствуйте, SuperXakep!
Есть специальное свойство - DroppedDown:
ComboBox1.DroppedDown:=True;
--------- Работа - не волк, а произведение силы на расстояние!
Ответ отправил: Ерёмин Андрей (статус: Профессионал)
Отправлен: 26.12.2005, 16:14 Оценка за ответ: 5
Отвечает: Dushin Igor
Здравствуйте, SuperXakep!
Для открытия ComboBox используйте:
ComboBox1.DroppedDown := True
Что бы закрыть:
ComboBox1.DroppedDown := False
--------- Старый глюк лучше новых двух!
Ответ отправил: Dushin Igor (статус: 1-ый класс)
Отправлен: 26.12.2005, 16:28 Оценка за ответ: 5
Отвечает: Schmak
Здравствуйте, SuperXakep!
Свойству ComboBoxа DroppedDown присвойте True:
ComboBox1.DroppedDown:=True;
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 26.12.2005, 16:40 Оценка за ответ: 5
Вопрос № 32.238
Посоветуйте что-нибудь простое как Zippit
(http://www.torry.net/samples/samples/compression/Zippit-0.0.1.zip), но для извлечения файлов из zip архива.
Отправлен: 26.12.2005, 19:17
Вопрос задал: 34076 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Rusland
Здравствуйте, 34076!
Попробуйте компонент ZipForge (http://www.componentace.com/zip_component_zip_delphi_zipforge.htm). Удачи.
--------- Пресловутое недостающее звено между обезьяной и цивилизованным человеком - это как раз мы. (Конрад Лоренц)
Ответ отправил: Rusland (статус: Специалист)
Отправлен: 27.12.2005, 10:51 Оценка за ответ: 5
Отвечает: Лучников Юрий Владимирович
Здравствуйте, 34076!
Поищи хороший компонент ZipForge.
Успехов;)
Ответ отправил: Лучников Юрий Владимирович (статус: 7-ой класс)
Отправлен: 27.12.2005, 11:03 Оценка за ответ: 5