Вопрос № 46947: Здраствуйте!
Определена переменная типа record ! Как из этой переменной по смещению (offset) и размеру данных вытащить данные?!
Есть код на C++ в приложении!...Вопрос № 46978: Добрый вечер.
Столкнулся с интересной задачей, не могу решить.
Кинул на форму Edit1, ListBox, и кнопку "Сохранить"
Принцип какой. Записываю название в Edit1, скажем "Задача"
Нажимаю кнопку "Сохранить"...Вопрос № 46991: Уважаемые Експерты.
Покажите как правильно в листбоксе перемещать элементы списка. Если можно чтоб перемещая на одном елемент, перемещапся и
на втором.
Знаю что:
procedure Exchange(Indexl, Index2: Integer);
procedure Move(CurIndex, ...Вопрос № 46996: Здравствуйте, уваажемые эксперты!
Подскажите, пожалуйста, как проверить, является ли строка правильной строкой вида '#444#123#456#444#544'. Т.е. начинается
с символа решетки, потом идут три любые цифры, потом снова решетка, потом еще три цифры, потом...Вопрос
№ 47019: Извиняюсь, к вопросу 47018 процедуры-то забыл написать! :)...
Вопрос № 46.947
Здраствуйте!
Определена переменная типа record ! Как из этой переменной по смещению (offset) и размеру данных вытащить данные?!
Есть код на C++ в приложении!
Приложение:
Отправлен: 21.06.2006, 16:56
Вопрос задал: chikanok (статус: 2-ой класс)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mvp
Здравствуйте, chikanok!
Ваш код не смотрел, поэтому приведу свой пример - думаю разберётесь. Только есть одна проблема в компиляторе: Projects->Options->Compiler->Record
Field Aligment - нужно выбрать 1, т. к. иначе элементы записи будут прилегать не плотно друг к другу и вам придётя ещё числа
подбирать.
Итак,
x : record
i : integer;
v : byte;
x : real
end;
где-то они определены, например:
x.i := 1;
x.v := 3;
x.x := 4.5;
т. к. мы знаем тип элементов записи (ведь знаем, судя по постановке вопроса?), то определим указатели на этот тип
i1 = ^integer;
v1 = ^byte;
x1 = ^real;
теперь вот как организовать доступ и показать элементы записи (см. приложение).
P. S. Смещения зависят от указанной опции компилятора.
P. P. S. Может есть решение попроще, но что-то за полчаса проще не нашёл :(
Приложение:
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 21.06.2006, 17:57
Отвечает: Татьяна
Здравствуйте, chikanok!
В принципе самое простое, это создать структуру record или packed record с идентичными полями (главное чтобы порядок полей
и их размеры совпадали)
После чего создать указатель на структуру и работать с этим куском памяти.
Чтобы ничего не повредить, есть хорошая функция
CopyMemory (описание в приложении)
Она копирует необходимый кусок памяти по адресу sourse
В принципе с помощью нее вы сможете как скопировать всю структуру, так и определенные поля, если известно смещение
Приложение:
--------- Возможно все. И ничего возможно тоже.
Ответ отправила: Татьяна (статус:
Студент)
Ответ отправлен: 21.06.2006, 19:35
Вопрос
№ 46.978
Добрый вечер.
Столкнулся с интересной задачей, не могу решить.
Кинул на форму Edit1, ListBox, и кнопку "Сохранить"
Принцип какой. Записываю название в Edit1, скажем "Задача"
Нажимаю кнопку "Сохранить". открывается файл text.ini, происходит сохранение в таком виде:
<begin name="Задача"> // т.е. подставляется слово из Edit1
Все строчки с ListBox
</end>
пробел
Файл может быть не пустой, и содержать подобный текст, но естественно с другими параметрами.
С Уважением, Максим
Отправлен: 21.06.2006, 20:10
Вопрос задал: Maximus (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Shady
Здравствуйте, Maximus!
Вам не ini файл нужен, а xml или база данных. Это будет и удобнее и проще в реализации. В Delphi есть такой замечательный
компонент XmlDocument, позволяющий работать с xml.
Если заинтересует - могу помочь примерами. Если конечно я правильно понял суть вашего вопроса.
По xml материала очень много. Куча материала в любом поисковике.
Ответ отправил: Shady (статус: 4-ый
класс)
Ответ отправлен: 21.06.2006, 21:53
Ответ отправил: Bochvarov NikB (статус:
9-ый класс)
Ответ отправлен: 21.06.2006, 22:08 Оценка за ответ: 4 Комментарий
оценки: Почти то что нужно, немного подправлю. Спасибо
Отвечает: Евгения
Здравствуйте, Maximus!
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
f: textfile;
begin
assignfile(f,'text.ini');
rewrite(f);
writeln(f,'<begin name='+ Edit1.Text +'>');
for i:=0 to ListBox1.Count-1 do
writeln(f,ListBox1.Items[i]);
writeln(f,'</end>');
writeln(f);
closefile(f);
end;
Счастливо!
--------- Я не волшебник, я только учусь... А разве кто-то обещал, что будет легко?
Ответ отправила: Евгения (статус:
7-ой класс)
Ответ отправлен: 21.06.2006, 22:56
Вопрос
№ 46.991
Уважаемые Експерты.
Покажите как правильно в листбоксе перемещать элементы списка. Если можно чтоб перемещая на одном елемент, перемещапся и
на втором.
Знаю что:
procedure Exchange(Indexl, Index2: Integer);
procedure Move(CurIndex, Newlndex: Integer) ;
Если не ошибаюсь.
Заранее большущее С П А С И Б О.
Отправлен: 22.06.2006, 02:46
Вопрос задал: Venom56r (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: mvp
Здравствуйте, Venom56r!
Непонятно, что имелось ввиду под "перемещался и на втором". См. приложение
Приложение:
--------- Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 22.06.2006, 03:17
Отвечает: Shady
Здравствуйте, Venom56r!
Не совсем понятен Ваш вопрос. Если вы хотите при изменении содержания одного listbox, чтобы содержание второго было таким
же, не проще ли сделать так:
listbox1.items:=listbox2.items;
А если вы хотите, чтобы выделенные строки тоже передавались используйте свойство selected.
Ответ отправил: Shady (статус: 4-ый
класс)
Ответ отправлен: 22.06.2006, 12:13
Вопрос
№ 46.996
Здравствуйте, уваажемые эксперты! Подскажите, пожалуйста, как проверить, является ли строка правильной строкой вида '#444#123#456#444#544'.
Т.е. начинается с символа решетки, потом идут три любые цифры, потом снова решетка, потом еще три цифры, потом снова решетка.
Я не дам юзеру вводить буквы, поэтому не следует проверять, являются ли символы между решетками цифрами. Т.е. мне нужно чтобы
первым символом, а затем и каждым четвертым была решетка, чтобы не пропустить, например, строки '#4444#445' , '#214##'. Заранее
благодарен!
Отвечает: Ерёмин Андрей
Здравствуйте, Андрющенко Вячеслав Васильевич!
Немного непонятна задча. Сначала между решётками было 3 символа, а потом уже 4. Впрочем, здесь сами разберётесь, как вам
лучше. В случае с 3-мя символами просто замените цифру 6 в функции на 5. Функция возвращает True, если строка удовлетворяет
данному условию. Сама функция в приложении.
Приложение:
--------- Нет правила без исключений. Правило без исключений - исключение из правил.
Вот я предлагаю немного другую функцию (обращаю Ваше внимание это не переделанная функция Ерёмина Андрея - а лично
написанная):
function proverka(x:string; dl:integer):boolean;
var i:integer;
begin
proverka:=true;
for i:=1 to length(x) do
begin
if (i mod dl=1) and (x[i]='#')
then if pos('#',copy(x,i+1,dl-1))<>0
then begin proverka:=false; break; end;
end;
end;
Пример использования:
procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
s:='#4435#1333#4356#3444#5444';
ShowMessage(BoolToStr(proverka(s,5),true));
end;
Обращаю Ваше внимание на то что в функции вторым параметром выступает число - длина последовательности (#4435
- длина=5; #443 - длина=4).
Удачи!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии
с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус:
Студент)
Ответ отправлен: 22.06.2006, 10:46 Оценка за ответ: 5
Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Андрющенко Вячеслав Васильевич!
По-моему, все предложенные вам варианты жирны по коду и неоптимальны по быстродействию.
Вы можете выполнять некоторе операции умножения/деления на более быстрые их эквиваленты - побитовые операции
l mod 4 - l and 3
l div 4 - l shr 2
i * 4 - i shl 2
А зачем перебирать все буквы в строке, если проверять надо только каждую 4-ую, я что-то не понимаю. А даже если и в общем
случае - замените все цифры 4 в коде на z и добавьте ф-ии параметр z:integer;
Приложение:
Ответ отправил: Сухомлин Кирилл Владимирович
(статус: Студент)
Ответ отправлен: 22.06.2006, 12:28 Оценка за ответ: 5
Отвечает: METALLDOCTOR
Здравствуйте, Андрющенко Вячеслав Васильевич!
Я делал подобное, только у меня начинается с цифры и между блоками цифр - пробелы, но принцип тот же. см. прил.
По идее при неправильном наборе вернётся хальт с номером символа, не соответствующего маске.
Приложение:
--------- Ни о чём не жалею!
Ответ отправил: METALLDOCTOR (статус:
3-ий класс)
Ответ отправлен: 23.06.2006, 12:07
Вопрос
№ 47.019
Извиняюсь, к вопросу 47018 процедуры-то забыл написать! :)
Отвечает: Melamed
Здравствуйте, Савенко
Вадим Иванович!
Если я правелно понял
Ваш код, то я заменил бы
4 метода одним следующим:
Приложение:
Ответ отправил: Melamed (статус:
1-ый класс)
Ответ отправлен: 22.06.2006, 12:34 Оценка за ответ: 5 Комментарий
оценки: Вот эта строчка помогла if (Sender.Items.Item[0].Caption <> '') then begin