Вопрос № 21856: Здравствуйте, эксперты!
1. Как в Delphi переводить шестнадцатеричное число в десятичное?
2. Если вам не трудно, приведите пример создания простого класса.
Спасибо за ваши большие и ясные ответы!...Вопрос № 21878: Добрый день уважаемые эксперты. Вот уже 3-ий день мучаюсь с одним вопросом по TreeView. На форме лежит TreeView, два TADOQUERY(для запроса групп и подгрупп), ADOConnection и DBGrid. Добавляю изначально к TreeView один уровень(корень)+фиктивную ветку....
Вопрос № 21.856
Здравствуйте, эксперты!
1. Как в Delphi переводить шестнадцатеричное число в десятичное?
2. Если вам не трудно, приведите пример создания простого класса.
Спасибо за ваши большие и ясные ответы!
Отправлен: 06.06.2005, 21:09
Вопрос задал: 3BEPEK (статус: 3-ий класс)
Всего ответов отправлено: 8
Отвечает: Denisss
Здравствуйте, 3BEPEK!
1. см. приложение 1
2. второй вопрос не совсем понятен, но если я верно понял, то см. приложение 2
Приложение:
Ответ отправил: Denisss (статус: 4-ый класс)
Отправлен: 06.06.2005, 21:37 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: nimoid
Здравствуйте, 3BEPEK!
1. Есть 2 варианта на твое усмотрение. См. приложение.
2. Не совсем понятен вопрос. Уточни плз.
p.s. Пользуйтесь поисковиком. А про классы, наверно, в любой книжке написано.
Приложение:
Ответ отправил: nimoid (статус: 2-ой класс)
Отправлен: 06.06.2005, 21:50
Отвечает: Pushkin
Здравствуйте, 3BEPEK!
Ниже привожу две функции для перевода чисел от 0 до 255 ( 00h-0FFh ). Их достаточно, чтобы разобраться. Если нужно, сделаешь для чисел любой разрядности:
{Из десятичной в шестнадцатиричную:}
function Dec2Hex(b: Byte): String;
var
r: String;
begin
r := '';
if b div 16 < 10 then r := r+Chr(b div 16 + 48) else
r := r+Chr(b div 16 + 55);
if (b - 16*(b div 16))<10 then r := r+Chr(b - 16*(b div 16) + 48) else
r := r+Chr(b - 16*(b div 16) + 55);
Dec2Hex := r;
end;
{Из шестнадцатиричной в десятичную:}
function Hex2Dec(h: String): Byte;
var
r: Byte;
begin
r := 0;
if (Ord(h[1])>=48) and (Ord(h[1])<=57) then r := (Ord(h[1])-48)*16 else
if (Ord(h[1])>=65) and (Ord(h[1])<=70) then r := (Ord(h[1])-55)*16;
if (Ord(h[2])>=48) and (Ord(h[2])<=57) then r := r+(Ord(h[2])-48) else
if (Ord(h[2])>=65) and (Ord(h[2])<=70) then r := r+(Ord(h[2])-55);
Hex2Dec := r;
end;
Ответ отправил: Pushkin (статус: 3-ий класс)
Отправлен: 06.06.2005, 22:39
Отвечает: Ерёмин Андрей
Здравствуйте, 3BEPEK!
В приложении две функции: для преобразования десятичного числа (Dec) в шестнадцатеричное (Hex) и наоборот. Для первой цели можно использовать стандартную функцию IntToHex, а вот для второй, кажется, стандартных функций не предусмотрено, но я могу и ошибаться. Во всяком случае, приведённые мною функции работают на 100%.
Приложение:
Ответ отправил: Ерёмин Андрей (статус: 6-ой класс)
Отправлен: 07.06.2005, 08:45
Отвечает: sir henry
Здравствуйте, 3BEPEK!
1. В приложении приведена функция из утилит к библиотеки KOL. Перевод из любой системы счисления в десятичную. Первый параметр строка-число, второй - система счисления.
2. Прсотой класс:
interface
TMyClass = class
private {Защищенная часть класса, невидимая снаружи. Используется только внутри класса}
Fpol11: integer;
Fpole2: string; {Это защищенные поля класса, невидимые снаружы}
public {А это видимая снаружи часть класса}
Procedure Proc1(s: string);
function Func1(k: byte): string;
properity Prop1 integer read Fpol1 write Fpol2; {Доступ к полю Fpol1}
properity Prop2 string read Func2 write Proc1; {А здесь мы имеем доступ к полю с помощью промежуточных функций}
End;
implementation
TMyClass.Proc1(s: string);
Begin
{Проводим промежуточную обработку строки}
Trim(s);
{Потом записываем результат в поле класса}
Fpole2:=s;
End;
TMyClass.Func1(k: byte): string;
Begin
{Функция для считывания значения поля}
Result:=Copy(Fpole2, 1, k);
End;
Приложение:
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 07.06.2005, 10:04
Отвечает: streetcat
Здравствуйте, 3BEPEK!
1.А откуда брать HEX-число?
Все числа в Delphi можно задать в HEX а использовать их можно как DEC-числа.
например:
var
hexnum: integer = $FAFAFA;
begin
showmessage(inttostr(hexnum));
end;
будет выведено сообщение не $FAFAFA а 16448250 (десятичный эквивалент)
ну а если HEX хранится в строке и его нужно преобразовать в DEC число, то нужно пользоваться функцией strtoint(а_здесь_строка)
==================
2. Вот пример класса-собаки ;)
у него есть методы:
Bark; // Лаять
Sleep; // Спать
Eat; // Есть
Play; // Играть
и свойства:
Color: TColor; // цвет
Gender: TGender; // пол
Breed: TBreed; // порода
вот и делаем... как в приложении
вообще, купите себе какую-нибудь книгу по Delphi
за подробностями michael91@yandex.ru
Приложение:
--------- WinERROR: Keyboard not detected. Press Enter to continue
Ответ отправил: streetcat (статус: 6-ой класс)
Отправлен: 07.06.2005, 15:06
Отвечает: CJ
Здравствуйте, 3BEPEK!
1)Да никак, Дельфа сама его преобразует. Она понимает их как родные. :))) : Вот например. form1.Tag:= $0C;
Ответ отправил: CJ (статус: Студент)
Отправлен: 07.06.2005, 21:33
Отвечает: Мурник Роман
Здравствуйте, 3BEPEK!
Если своей функцией, то так:
function hextodec(he:string);
var h,l:integer;
begin
if he[1]='0' then h:=0
if he[1]='1' then h:=1
if he[1]='2' then h:=2
...
if he[1]='f' then h:=15
if he[2]='0' then l:=0
if he[2]='1' then l:=1
if he[2]='2' then l:=2
...
if he[2]='f' then l:=15
result:=h*16+l;
end;
Ответ отправил: Мурник Роман (статус: 1-ый класс)
Отправлен: 09.06.2005, 07:43
Вопрос № 21.878
Добрый день уважаемые эксперты. Вот уже 3-ий день мучаюсь с одним вопросом по TreeView. На форме лежит TreeView, два TADOQUERY(для запроса групп и подгрупп), ADOConnection и DBGrid. Добавляю изначально к TreeView один уровень(корень)+фиктивную ветку. При раскрытии уровня удаляю фиктивную ветку. Проверяю, если раскрыл корневой узел, то делаю запрос к базе и добавляю все записи из базы которые имеют признак группы = 1 и код группы = 0. К добавленной Ноде в параметр Data записываю код добавленной записи. Прежде
чем перейти к следующей записи, делаю еще запрос на наличие подгрупп. Если кол-во групп больше 0, то добавляю фиктивную ветку к этой Ноде. Далеее перехожу к следующей записи. Все работает замечательно, но все Ноды у которых нет вложенных папок рисуются с +(плюсиком). Где я наступил на грабли? Не пойму. Взгляните свежим взглядом. Заранее благодарен. Александр.
Приложение:
Отправлен: 07.06.2005, 12:06
Вопрос задал: sb (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: sir henry
Здравствуйте, sb!
По-моему, это грабли микрософт, потому что в Регэдите и в Эксплорере случается такое-же. :)
Ответ отправил: sir henry (статус: Профессор)
Отправлен: 07.06.2005, 13:50