Вопрос № 17544: Уважаемые эксперты!
Извините за глупый вопрос но как вывести содержимое массива типа byte в Label.
С уважением Антон
...Вопрос № 17546: Уважаемые эксперты.
Допустим я ввел с клавиатуры информацию в StringGrid.
Можно ли и как сделать наподобии ini файла что бы при выходе из программы и последующем ее запуске информацию не пришлось вводить снова.
С уважением Антон.
...Вопрос № 17563: Уважаемые эксперты.
Может я чего то и не понимаю а может не так объяснил.
Когда я вывожу содержимое массива в Memo
memo.lines.text:= memo.lines.text + ' ' + ( inttostr(romsensor[n,i]));
выводится полностью содержимое всего массива, а ...Вопрос № 17565: Уважаемые эксперты.
Как в StringGrid разрешить редактирование например только в 1 и 5 столбце и можно ли сделать фиксированными только 2 и 3 столбец и если можно то как.
С уважением Антон.
..
Вопрос № 17544
Уважаемые эксперты!
Извините за глупый вопрос но как вывести содержимое массива типа byte в Label.
С уважением Антон
Отправлен: 26.02.2005, 19:29
Вопрос задал: антон (статус: Посетитель)
Всего ответов отправлено: 6
Отвечает: Sh-st
Здравствуйте, антон!
i-начало массива
j-конец
q:Integer;
label1.caption:='';
for q:=i to j do
label1.caption:=inttostr(massiv[q]));
Ответ отправил: Sh-st (статус: 2-ой класс)
Отправлен: 26.02.2005, 19:38 Оценка за ответ: 5
Отвечает: Bob Johnson
Здравствуйте, антон! C Помощью функции IntToStr преобразовать число в строку и затем вывести...
* EMan2.0: ---===*** Debug mode ***===---
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 26.02.2005, 21:31
Отвечает: SteelNick
Здравствуйте, антон!
Байт по байту:
Label1.Caption:='';
for i:=low(Arr) to high(Arr) do
Label1.Caption:=Label1.Caption+Arr[i];
Ответ отправил: SteelNick (статус: Практикант)
Отправлен: 26.02.2005, 21:55 Оценка за ответ: 5
Отвечает: Vj
Здравствуйте, антон!
Функция inttostr(par: integer) поможет тебе!
Пример:
var i: byte;
i2: integer;
...
Label1.Capture:=inttostr(i);
Label2.Capture:='Текущее значение = '+inttostr(i2);
P.S. Обратно - strtoint(s: string)
P.P.S. C вещественными - вместо int - float.
Удачи.
Ответ отправил: Vj (статус: 10-ый класс)
Отправлен: 27.02.2005, 03:08 Оценка за ответ: 4
Отвечает: zer0access
Здравствуйте, антон!
Это делается достаточно просто. Просто запускаем цикл по массиву и в каждой итерации прибавляем к содержимому Label'a элемент массива. Пример кода в приложении. Можно использовать вспомогательную строковую переменную. Сначала в цикле формируем строку, а потом Label1.Caption присваиваем эту строку.
Приложение:
Ответ отправил: zer0access (статус: Студент)
Отправлен: 27.02.2005, 18:56 Оценка за ответ: 5
Отвечает: sir henry
Здравствуйте, антон!
А массив большой? Если большой, то вместо Label лучше, по-моему, использовать Memo сделаное только для чтения.
Общий принцип таков:
Считываете каждое значение массива, преобразуете его в строку и добавляете ее либо в Label, либо в Мемо.
var ar: array[0..10] of byte;
i: integer;
Begin
For i:=0 to 10 do
Label:=Label+IntToStr(ar[i]);
End;
Вариант с мемо:
var ar: array[0..10] of byte;
i: integer;
s: string;
Begin
For i:=0 to 10 do
s:=s+IntToStr(ar[i]);
Memo.Lines.Add(s);
End;
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.02.2005, 05:29
Вопрос № 17546
Уважаемые эксперты.
Допустим я ввел с клавиатуры информацию в StringGrid.
Можно ли и как сделать наподобии ini файла что бы при выходе из программы и последующем ее запуске информацию не пришлось вводить снова.
С уважением Антон.
Отправлен: 26.02.2005, 19:41
Вопрос задал: антон (статус: Посетитель)
Всего ответов отправлено: 5
Отвечает: Sh-st
Здравствуйте, антон!
Почитай книгу вначале какую-нибудь, а то вопросы странные...
У Stringgrida есть возможность обращать к каждой ячейки и получуть из нее любую информацию: текст, размеры.
Ответ отправил: Sh-st (статус: 2-ой класс)
Отправлен: 26.02.2005, 20:11 Оценка за ответ: 2
Отвечает: SteelNick
Здравствуйте, антон!
Можно. У StringGrid есть свойство Rows (массив строк). Каждая типа TStrings. А у TSrings есть метод SaveToFile. Попробуй.
Ответ отправил: SteelNick (статус: Практикант)
Отправлен: 26.02.2005, 21:08 Оценка за ответ: 5
Отвечает: CJ
Здравствуйте, антон!
Ну ты сам сказал правильно, сначала при выходе из программы сохраняй всю информацию в ini-файл,
а при запуске читай из него.
Ответ отправил: CJ (статус: Студент)
Отправлен: 27.02.2005, 13:43 Оценка за ответ: 3
Отвечает: sir henry
Здравствуйте, антон!
А Вы не хотите вместо StringGrid использовать таблицу базы данных какого либо формата? Она хранится на диске, загружается в память во время работы проги и все, что Вы туда внесли, сохраняется на диске. Это будет проще, чем корячиться со StringGrid. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.02.2005, 08:58 Оценка за ответ: 4
Отвечает: Shizuku Tsukishima
Здравствуйте, антон!
Можно. Используйте файловые функции (AssignFile, Reset, CloseFile)
и свойство StringGrid1.Cells[aCol,aRow]; для доступа к содержимому ячейки таблицы.
Внимание! Столбец в TGrid указывается первым (aCol). Количество строк и столбцов в таблице можно легко получить:
StringGrid1.RowCount; // количество строк
StringGrid1.ColCount; // количество столбцов
Не забывайте учитывать наличие/отсутствие фиксированных строк/столбцов.
Думаю материала достаточно. Удачи.
Ответ отправила: Shizuku Tsukishima (статус: 3-ий класс)
Отправлен: 28.02.2005, 15:29 Оценка за ответ: 5
Вопрос № 17563
Уважаемые эксперты.
Может я чего то и не понимаю а может не так объяснил.
Когда я вывожу содержимое массива в Memo
memo.lines.text:= memo.lines.text + ' ' + ( inttostr(romsensor[n,i]));
выводится полностью содержимое всего массива, а когда в Label
label1.caption:=inttostr(romsensor[n,i]);
то только последний элемент, а как вывести в Label все значения массива?
С уважением Антон.
Отправлен: 27.02.2005, 09:14
Вопрос задал: антон (статус: Посетитель)
Всего ответов отправлено: 9
Отвечает: John Freeman
Здравствуйте, антон!
Не тормозить!!! ;)
memo.lines.text:= memo.lines.text + ' ' + ( inttostr(romsensor[n,i]));
добавляет,
label1.caption:=inttostr(romsensor[n,i]);
переписывает, так что выпей пива и напиши:
label1.caption:=label1.caption+' '+inttostr(romsensor[n,i]);
А для memo вообще то есть memo1.lines.add
Ответ отправил: John Freeman (статус: Специалист)
Отправлен: 27.02.2005, 14:41 Оценка за ответ: 5
Отвечает: zer0access
Здравствуйте, антон!
Ты сам же ответил на свой вопрос. Когда ты добавляешь в Memo, то присваиваешь свойству text _текущее_ содержимое Memo плюс твои данные. Аналогично надо делать и с Label.
Приложение:
Ответ отправил: zer0access (статус: Студент)
Отправлен: 27.02.2005, 19:05 Оценка за ответ: 5
Отвечает: Bob Johnson
Здравствуйте, антон! А ты не пробовал писать label1.caption:= label1.caption + inttostr(romsensor[n,i]);
* EMan2.0: ---===*** Debug mode ***===---
Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 27.02.2005, 19:24
Отвечает: Vj
Здравствуйте, антон!
Итак в Memo:
var n, i: integer;
...
for n:=1 to count do //count - значение, до которого будем "тянуть" переменную n
for i:=1 to count2 do //count2 - значение, до которого будем "тянуть" переменную i
Memo.Add(inttostr(romsensor[n,i])); //в Memo заносим строчку со значением ячейки [n,i]
А теперь в Label:
var n, i: integer;
s: string;
...
s:='';
for n:=1 to count do //count - значение, до которого будем "тянуть" переменную n
for i:=1 to count2 do //count2 - значение, до которого будем "тянуть" переменную i
s:=s+inttostr(romsensor[n,i])+' ';
Label1.Caption:=s; //в Label заносим строчку s со значениями всех ячеек массива romsensor
Удачи.
Ответ отправил: Vj (статус: 10-ый класс)
Отправлен: 28.02.2005, 00:26 Оценка за ответ: 5
Отвечает: sir henry
Здравствуйте, антон!
Вот так:
Label1.Captin:=Label1.Caption+inttostr(romsensor[n,i]);
т.е. к тому, что уже есть ты добавляешь следующий элемент массива.
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 28.02.2005, 08:54 Оценка за ответ: 5
Отвечает: Samum
Здравствуйте, антон!
Видимо вы привели сточки из цикла. Если это так, то все просто: в первом случае в каждой итерации вы добавляете новое значение из массива к строке (см. memo.lines.text+...). Dj втором же случае вы каждый раз заменяете значение в label.caption. Чтобы вывести весь массив в label надо писать label1.caption:=label1.caption+inttostr(romsensor[n,i]);
Ответ отправил: Samum (статус: Специалист)
Отправлен: 28.02.2005, 13:02 Оценка за ответ: 5
Отвечает: Shizuku Tsukishima
Здравствуйте, антон!
В Label по умолчанию влазит только одна строка и ещё Ваш код с ошибкой, Вы каждый раз трёте новой строкой предыдущую, в итоге остаётся последняя из строк.
Лекарство:
Label1.WordWrap:=True;
Label1.Caption:=Label1.Caption + IntToStr(romsensor[n,i]); // в цикле по лементам массива
Ответ отправила: Shizuku Tsukishima (статус: 3-ий класс)
Отправлен: 28.02.2005, 14:50 Оценка за ответ: 5
Отвечает: Sh-st
Здравствуйте, антон!
Приведи полный код вывода массива в Tmemo и в TLabel. Тогда посмотрим.
Ответ отправил: Sh-st (статус: 2-ой класс)
Отправлен: 28.02.2005, 16:57
Отвечает: CJ
Здравствуйте, антон!
В label выводитьься только одна строка. А memo состоит из строк типа TString.
Ответ отправил: CJ (статус: Студент)
Отправлен: 01.03.2005, 16:56
Вопрос № 17565
Уважаемые эксперты.
Как в StringGrid разрешить редактирование например только в 1 и 5 столбце и можно ли сделать фиксированными только 2 и 3 столбец и если можно то как.
С уважением Антон.
Отправлен: 27.02.2005, 11:13
Вопрос задал: антон (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: SteelNick
Здравствуйте, антон!
Никак простыми методами. Можно запретить редактирование во всем гриде, затем при входе в соответствующую ячейку создавать над нею Edit или ComboBox или что еще. Если интересна конкретика - пиши на мою личную почту.
Ответ отправил: SteelNick (статус: Практикант)
Отправлен: 27.02.2005, 14:55 Оценка за ответ: 4
Отвечает: Sh-st
Здравствуйте, антон!
Нет нельзя. Проверяй вся вручную. Если курсор в 1 столбце, то stringgrid1.row:=-1;
Примерно так.
Ответ отправил: Sh-st (статус: 2-ой класс)
Отправлен: 28.02.2005, 16:55 Оценка за ответ: 5