Форум Magic Team

Разное => Программирование => Тема начата: BlueHairLady от 27 Февраль 2009, 11:09:59

Название: Помощь по Delphi
Отправлено: BlueHairLady от 27 Февраль 2009, 11:09:59
На старом форуме находилась очень полезная тема: http://magicteam.mybb.ru/viewtopic.php?id=4&p=6 . Думаю, её стоит продолжить. Тем более, что у меня появилось затруднение. Постараюсь сформулировать попонятнее.


Хочу наконец научиться создавать собственные компоненты. А конкретнее, собираюсь создать небольшой простенький компонент (HexEasy), который бы позволял работать с числом как в десятичном, так и в шестнадцатеричном представлениях. Не мудрствуя, в качестве базового взяла Edit. Сочла наиболее удобным создать отдельное поле (FValue: Integer), непосредственно содержащее число, десятичное или шестнадцатеричное изображение которого выведено на монитор. По моей задумке, когда фокус находится на данном компоненте, любое нажатие клавиши должно либо игнорироваться, либо приводить к изменению данной переменной. Т.е. обработка события KeyPress должна состоять как бы из трёх этапов:
1. Предварительный анализ введённого символа на его допустимость.
2. Изменение свойства Text элемента.
3. Анализ изменённого свойства Text: преобразование его в значение FValue и в случае необходимости дальнейшая корректировка.

Я пыталась это сделать примерно таким образом:

procedure THexEasy.KeyPress (var key: Char);
begin
 
  . . . . . . . . . . . .            //предварительная обработка символа key
 
  inherited KeyPress(key);
 
  If Text='' then begin
                      FValue := 0;
                      EXIT;
                      end;
  FValue := StrToInt(Text);
  If FValue>FValueMax then begin  //если число больше максимально допустимого...
                                      FValue := FValueMax;
                                      Text := IntToStr(FValue);
                                      end;  //всё это упрощённо, когда работа идёт с десятичным числом

end;

Но в результате вставки в программу примерно такого кода обнаружилось, что свойство Text компонента изменяется лишь после того, как данная процедура полностью закончит свою работу. Т.е. анализируемое в последней части свойство Text имеет содержание, которое было до того, как пользователь нажал клавишу, а мне нужно обработать именно последствия нажатия. Можно ли как-то форсировать изменение свойства Text?

Никогда не создавала компоненты и даже классы, не ругайтесь сильно, если где-то глуплю.
Название: Re: Помощь по Delphi
Отправлено: Джинни от 27 Февраль 2009, 14:59:06
{
 !!УБРАТЬ!!
. . . . . . . . . . . .            //предварительная обработка символа key
 
  inherited KeyPress(key);
  If Text='' then begin
                      FValue := 0;
                      EXIT;
                      end;
 !!УБРАТЬ!!
}
 
 if Key in ['$', 'x', #13] then Key := #0;
 if Key in ['0'..'9', 'A'..'F', 'a'..'f'] then
 begin
  FValue := StrToIntDef(Text + Key, FValueMax); //в случае ошибки будет возвращать FValueMax
  Key := #0;
  If FValue>FValueMax then begin  //если число больше максимально допустимого...
                                      FValue := FValueMax;
                                      end;  //всё это упрощённо, когда работа идёт с десятичным числом
  Text := IntToStr(FValue);
 end;
//всё это будет работать и с шестнадцатиричными числами в формате $123 или 0x123
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 27 Февраль 2009, 16:05:26
Прости, Джинни, но данный алгоритм кривоватенький, поскольку новый символ всегда добавляется в конец, вне зависимости от места расположения курсора. Да и сам курсор после каждого нажатия перемещается на первую позицию поля ввода, что сбивает с толку.

Насколько я знаю, есть свойство SelStart, которое находит/устанавливает позицию курсора. С его помощью данный алгоритм, наверное, получится довести до ума, хотя всё это и будет выглядеть громоздко. Не знаю..., здесь тоже есть подводные камни... Но неужели нет более простого способа непосредственно прочитать уже изменённое свойство Text?
Название: Re: Помощь по Delphi
Отправлено: Джинни от 27 Февраль 2009, 16:55:24
Это вообще не алгоритм, а спонтанная демонстрация возможностей. :)
SelStart есть, да. Но значение Text вообще лучше в KeyPress не обрабатывать. Есть событие OnChange - там текст уже изменённый после KeyPress.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 27 Февраль 2009, 17:58:19
Спасибо, сейчас попробую. Мне в любом случае нужно было писать обработчик события onChange :), поскольку значения могут заноситься в поле ввода не только набором с клавиатуры, но и копированием. Мне нравится, когда всё учтено.  o:)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 27 Февраль 2009, 21:54:18
Упс... При простом вводе с клавиатуры похоже, что всё работает. Но совершенно неожиданно обнаружила, что ограничения, прописанные мною в обработчике события onKeyPress, не позволяют копировать значения в буфер и вставлять из буфера. Сажусь думать дальше.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 27 Февраль 2009, 23:54:27
Почти уверена, что можно добиться нужного мне эффекта, если ограничить нажатие некорректных клавиш с помощью процедуры KeyDown, а затем произвести более тонкую настройку вводимых символов процедурой KeyPress. Но у меня никак не получается заблокировать нажатие некорректных клавиш в процедуре KeyDown. Для простоты предположим, что необходимо заставить программу реагировать исключительно на нажатия цифровых клавиш основного блока клавиатуры. Их коды от 48 до 57. Соответственно, я пишу

procedure THexEasy.KeyDown(var key: Word; shift: TShiftState);
begin
  if not (key in [48..57]) then key:=0;
  inherited KeyDown(key, shift);
end;

Но несмотря на это, в поле всё равно вводятся любые буквы, блокируются всего несколько клавиш, таких как стрелки, Home, End, Delete. И только этими клавишами у меня получается здесь управлять. Скажите, что я делаю неправильно? Как можно с помощью обработчика события onKeyDown заставить программу не реагировать на нажатие любых клавиш кроме специально перечисленных?
Название: Re: Помощь по Delphi
Отправлено: Джинни от 28 Февраль 2009, 08:00:05
Не нужен тебе OnKeyDown. Только OnKeyPress и OnChange. В KeyPress только запрет символов, которые нельзя вводить:
if not (Key in ['0'..'9', 'A'..'F', 'a'..'f', '$', 'x']) then Key := #0;
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 28 Февраль 2009, 10:59:00
if not (Key in ['0'..'9', 'A'..'F', 'a'..'f', '$', 'x']) then Key := #0;

Но при таком запрете перестают работать управляющие комбинации клавиш, такие как <Ctrl+X>, <Ctrl+C>, <Ctrl+V>. В поле ничего нельзя вставить и ничего нельзя оттуда скопировать.

С выспавшейся головой села разбираться, как подобная проблема преодолена в компоненте SpinEdit. Там что-то замудрено, какие-то свои внутренние непонятные переменный, но до сути я докопалась.  8) В результате создала вот такой код:


procedure THexEasy.KeyPress(var key: Char);
begin
  If FSystemHex
    then begin                       //если число 16-ное
           case key of
                 'a','Ф','ф': key:='A';
                 'b','И','и': key:='B';
                 'c','С','с': key:='C';
                 'd','В','в': key:='D';
                 'e','У','у': key:='E';
                 'f','А','а': key:='F';
                 end;
           if not (key in ['0'..'9','A'..'F',#1..#31]) then key:=#0;
           end
    else                               //если число 10-ное
           if not (key in ['0'..'9',#1..#31]) then key:=#0;

  If key=#0
    then Beep
    else inherited KeyPress(key);
end;


Буду доделывать дальше. Спасибо за поддержку. Наверное, скоро появятся новые вопросы.  :-[
Название: Re: Помощь по Delphi
Отправлено: Джинни от 28 Февраль 2009, 12:47:39
if not (Key in ['0'..'9', 'A'..'F', 'a'..'f', '$', 'x']) then Key := #0;

Но при таком запрете перестают работать управляющие комбинации клавиш, такие как <Ctrl+X>, <Ctrl+C>, <Ctrl+V>. В поле ничего нельзя вставить и ничего нельзя оттуда скопировать.
Ну добавить остальные исключения несложно.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 28 Февраль 2009, 13:15:39
Ради интереса, а каким образом? Ведь клавиша <Ctrl> в данной процедуре не читается! Как раз именно из-за этого я вчера и застряла.

(Ну кроме того способа, который я применила. Хотя сама не понимаю, как это работает. :-[ Выставила значения #1..#31 просто по аналогии со SpinEdit.)
Название: Re: Помощь по Delphi
Отправлено: Джинни от 28 Февраль 2009, 16:06:01
Описать глобальную переменную:

var
 ShiftData: TShiftState;

в OnKeyDown прописать:

ShiftData := Shift;

В OnKeyPress:

if ShiftData = [] then
begin
 if not (Key in [#8, '0'..'9', 'A'..'F', 'a'..'f', '$', 'x']) then Key := #0;
end;
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 28 Февраль 2009, 16:58:40
Вынести значение переменной Shift из обработчика события onKeyDown посредством глобальной переменной... - любопытно. :)  Но мне больше нравится вариант, который был выстрадан мною. ;D


P.S. Проявлю-ка я свой вредный характер и испорчу такую замечательную карму! *MALVINA3*
Название: Re: Помощь по Delphi
Отправлено: Джинни от 01 Март 2009, 06:39:33
Не хулигань. :)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 01 Март 2009, 09:58:06
Компонент почти создан! Но баги так просто никогда не сдаются. *F_DISAPPOINTED*

Когда после установки компонента в среду Delphi я помещаю его на форму, то выскакивает предупреждающее окно, которое по начальной задумке должно появляться при попытке пользователя скопировать в поле ввода нецифровую строку. Хотя элемент затем и создаётся, и работает. В какой-то мере такое поведение правильно, посколько текст базового элемента 'Edit1' изображением числа не является. Но как это исправить? Как сделать так, чтобы при создании компонента в поле ввода находился '0'? Я попыталась написать такой код:

constructor THexEasy.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FValueMax := 1000000;
  //Text := '0';
end;

Так вот, выражение "FValueMax := 1000000" Delphi воспринимает абсолютно адекватно. Но если раскомментировать выражение "Text := '0'" , то при компиляции программы выводится сообщение "Control '' has no parent window." и элемент не создаётся. А в SpinEdit было сделано именно так  *SCRATCH* - и никаких проблем. В чём дело?
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 01 Март 2009, 19:25:15
Кажется, до меня что-то начало доходить... Данный сбой происходит из-за того, что в обработчике onChange упоминается свойство SelStart. Но в этот момент элемент ещё вроде бы как не создан, обращение уходит в никуда, отсюда и ошибка. Но без использования данного свойства элемент будет работать криво. Возможно, специально ради этого стоит использовать конструкцию try...except. Буду думать.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 01 Март 2009, 21:41:14
Ура! Ура! УРА!!! Компонент создан, все баги разбежались. А если вдруг какой покажется, запущу босоножкой! (Эх, побыстрее бы лето...) Теперь можно приниматься и за непосредственно программу.
Название: Re: Помощь по Delphi
Отправлено: Джинни от 02 Март 2009, 07:01:57
Поздравляю :)
Название: Re: Помощь по Delphi
Отправлено: Guyver от 02 Март 2009, 10:45:06
А что за прога будет?
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 02 Март 2009, 17:18:40
Ничего нового не придумываю. Просто решила свою Поганку переделать на Delphi. Рано мне ещё Круптары писать.*MALVINA3*  Ну естественно, добавлю кое-какие новые возможности. А некоторые старые наоборот уберу.:) Постараюсь добиться максимального соотношения простоты и полезности. Это если успею закончить, у меня не так много времени.


Только что набросала интерфейс главного окна. Увидела, что моему компоненту явно не хватает свойства Enabled и парочки других. (Да, здесь должна пояснить, что я решила изменить базовый класс с TEdit на TCustomEdit. Ну зачем мне куча ненужных настроек?) Решила также сразу на основе первого компонента сделать ещё один, прикрутить к нему стрелочки, как в SpinEdit. Интересно, а получится оба компонента запихнуть в один модуль? Вроде бы всё вышеперечисленное сделать не сложно...*MALVINA2*  Пока не начала... ;D
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 02 Март 2009, 23:28:39
На базе старого элемента сОздала новый, со стрелочками. Аналог SpinEdit, но умеет обращаться с 16-ными числами. Глюков не наблюдается, распугала их портретом Билла Гейтса. Или они убежали созывать другие глюки... В общем, пока их нет. :D  Но у меня крайне большая просьба. Кто-нибудь, пожалуйста, очень прошу, объясните мне, КАК ЭТОТ КОМПОНЕНТ РАБОТАЕТ?!!!

Вставить стрелочки внутрь текстового поля не сложно. Но затем уже внутри элемента нужно как-то перераспределить какие-то рабочие области, чтобы цифры не забегали за стрелки, а сами стрелки не исчезали. Это уже не искусство, это наука! И этой науке я не обучена! Несколько часов копалась в элементе SpinEdit, но толком ничего не поняла. Куча каких-то то ли констант, то ли переменных, то ли функций, которые приходят вообще из других модулей... Ничего не понятно. *SCRATCH*  Просто тупо скопировала ключевые места.


P.S. Люблю сама с собой поболтать. ;D
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 06 Март 2009, 19:13:18
Никто случайно с такой проблемкой не сталкивался? :-[  В общем, как писала ранее, создала два собственных компонента, запихнула их в один модуль, установила, вроде бы всё работало нормально. Затем мне понадобились цветные кнопки. Нашла рецепт на http://delphiworld.narod.ru/base/change_button_color.html, скопировала, по началу тоже никаких проблем. Но вот незадача: когда перезапускаешь компьютер, тот "забывает", где находится файл с этой самой цветной кнопкой. Выводится сообщение "File not found: 'ColorButton.dcu'". Файл на месте, где и положено находиться, просто почему-то Delphi его не видит. %) Поэтому на протяжении последних нескольких дней компонент каждое утро приходится устанавливать в среду Delphi заново. После этого всё снова начинает работать, но только до следующей перезагрузки компьютера. *SCRATCH*


В принципе, мне не составит труда запихнуть текст этого компонента в свой модуль. Так наверное и сделаю, если никто не подскажет другой вариант. Но всё же мне бы хотелось, чтобы мои компоненты были в одной папке, а чужие - в другой.
Название: Re: Помощь по Delphi
Отправлено: Джинни от 07 Март 2009, 09:09:25
Tools->Environment Options->Library->Library Path->Нажать "..."->выбрать папку где лежит твой модуль ColorButton.dcu->Нажать "OK"->Нажать "Add"->OK, OK
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 07 Март 2009, 10:46:27
Надо же, сегодня всё запустилось без проблем! Вчера вместо того, чтобы просто нажать Component->Install Component, решила всё переделать с самого начала, с чистого листа (вернее, файла). Первым делом снова щёлкнула на Component->New Component, образовавшийся шаблон заменила скопированным текстом модуля, сохранила - и уже новый файл вмонтировала в среду Delphi. Хочется верить, что проблем с этим и дальше не будет.

Вот почему так получается? Сижу над проблемой, думаю, решения не вижу. Стоит описать ситуацию на форуме - и через пару часов к самой приходит озарение?!
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 12 Март 2009, 12:03:23
Не дадите совет? Наивное затруднение. :-[  У меня в программе несколько форм и мне бы хотелось, чтобы внутри каждой из них существовало несколько переменных, которые были бы видны во всех процедурах данной формы, но не были бы видны из других форм. Как это положено делать? Засунуть их в раздел private объявления типа формы или создать ещё один блок var в разделе реализации (т.е. ниже слов implementation   {$R *.dfm})?
Название: Re: Помощь по Delphi
Отправлено: Джинни от 13 Март 2009, 08:34:04
Через private.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 13 Март 2009, 13:14:35
Странновато... Перенесла объявление файловой переменной F: File из implementation в private - та перестала работать. Хотя остальные объявления переменных переместились без проблем. Но не буду зацикливаться, в одном месте встретила мимоходное упоминание, что в разделе реализации также можно объявлять переменные, так что ради сохранения единства стиля пока оставлю всё на старых местах. Пока всё работает без сбоев, изучение тонкостей теории позволительно оставить до лучших времён. :)


Сам корруптор и первая вспомогательная подпрограмма созданы. Осталось самое сложное, но и самое интересное - со второй подпрограмой придётся повозиться.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 17 Март 2009, 23:41:09
Программа почти закончена! Всё работает, и даже похоже, что правильно. :D Осталось аккуратненько выровнять элементы, тщательно проверить на различных нестандартных режимах и написать небольшую инструкцию. Никто не желает помочь с тестированием? o:) (Ага, размечталась! Толпы народа так прямо и рванули!! Дверь выдавили и с собой унесли.)


В заключение желала бы добавить ещё одну небольшую функцию. Хотелось бы, чтобы переключение между 10-ным и 16-ным режимами работы осуществлялось при нажатии определённой комбинации клавиш (думаю задействовать <Ctrl+H>) на любой форме. Не хочу везде тыкать переключатели, достаточно одного в главном окне. Не подскажите, как это можно реализовать? Т.е. чтобы при нажатии определённой комбинации клавиш выполнялась некая последовательность действий, вне зависимости от того, на каком конкретно элементе находится фокус.



P.S.
И сразу ещё один вопрос. Что меня больше всего смущает, так это слишком большой получающийся размер программы. Всё же почти 800 Кб для корруптора, пусть даже очень мощного - это многовато как-то. А нельзя ли в настройках компилятора Delphi 7 отключить что-нибудь ненужное, чтобы ускорить работу и уменьшить размер приложения?
Название: Re: Помощь по Delphi
Отправлено: Guyver от 18 Март 2009, 11:15:20
Есть программы, которые сжимают полученный дельфийский exe файл - у меня прога уменьшалась на 50%, но это скорее исключение - так на 10% уменьшится, не более... А вообще может код надо упростить? Переменные там всякие длинные заменить на короткие? Если ты пробовала использовать различные компоненты, а потом от них отказалась - то могут остаться библиотеки от них в самом начале файла - они тоже могут немного увеличивать файл... Но это тоже редко бывает...

Я потестю.. А потом и свою версию обновлю ;о)))
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 18 Март 2009, 16:08:03
Есть программы, которые сжимают полученный дельфийский exe файл
А название не подскажешь?


А вообще может код надо упростить?
Не думаю, что смогу что-нибудь придумать в этом направлении. Это ведь не просто корруптор, он усилен двумя анализаторами и средствами контроля за своей работой. 4 формы, 3 вида нестандартных компонентов, два из которых написала лично. Задумала это приложение ещё год назад, но тогда у меня ещё не было достаточно знаний, не получилось.


Переменные там всякие длинные заменить на короткие? Если ты пробовала использовать различные компоненты, а потом от них отказалась - то могут остаться библиотеки от них в самом начале файла - они тоже могут немного увеличивать файл...
*SCRATCH* Мне всегда казалось, что названия переменных - это не более, чем информация для разработчика; что на длину создаваемого машинного кода это никак не влияет. Похожая вещь и с указываемыми библиотеками - ИМХО, это просто места, куда заглядывает компилятор при создании исполняемого файла, лишние библиотеки на величину конечного файла никак не влияют. Или я не права? *SCRATCH* А вообще я действительно иногда с элементами экспериментировала.


Бетку сделаю через пару дней, пришлю на e-mail.
Название: Re: Помощь по Delphi
Отправлено: Griever от 18 Март 2009, 19:48:23
Цитировать (выделенное)
Есть программы, которые сжимают полученный дельфийский exe файл
А название не подскажешь?
Бесплатный - консольный UPX (обычно используют "--brute ExeFileName"). Но толку от подобных программ немного - жмут они как архиваторы (ну ладно, лучшие архиваторы), и добавляют распаковщик в тело исполняемого файла, поэтому, думаю, логичнее просто упаковать программу, скажем, в 7z...
Боюсь, что даже если бы было что оптимизировать, эффект бы это дало минимальный:
Цитировать (выделенное)
основная причина громоздких размеров программ, в которых используются классы - это то обстоятельство, что одни классы используют другие, те, в свою очередь, третьи, и так далее, и так до такой степени, когда разорвать связи уже невозможно. Вы указываете в uses ссылку на модуль Forms, или на Dialogs, и все - ваши 350-400 Килобайт в программу добавлены
Поэтому радикальный выход: сменить язык; программировать API; отказаться от GUI; ну или использовать KOL и MCK.
Название: Re: Помощь по Delphi
Отправлено: Джинни от 19 Март 2009, 07:02:05
Выход: на размере на заморачиваться.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 19 Март 2009, 11:06:22
Работу горячих клавиш организовала, поставив свойство формы KeyPreview в положение true и написав небольшой обработчик события onKeyDown. При этом выяснила любопытную вещь - оказывается, комбинация <Ctrl+H> в большинстве случаев действует аналогично клавише <BackSpace>. Не знала такого. Заблокировать эту вещь с ходу не получилось (сначала в поле ввода удаляется символ, а лишь затем срабатывает обработчик формы), поэтому решила просто сменить свою управляющую комбинация на <Ctrl+Q>. :)

Про UPX почитала - вещь сомнительной полезности. *F_DISAPPOINTED*  К ускорению программы и уменьшению занимаемой ею оперативной памяти не приводит; для передачи через Интернет лучше использовать тот же самый 7z; разве что немного экономит место на диске - но что такое лишние сэкономленные 100 кб для современных винчестеров?! :D

Про API, KOL и МСК также почитала, но это не моя квалификация, а создавать корруптор без выразительного GUI - ИМХО, нелепо. Небольшой выигрыш даёт снятие флажков с Range checking и Overflow checking в опциях компилятора (правда они по умолчанию и так должны быть сняты). Снятие флажков с I/O checking и со всех пунктов в группе Debugging не уменьшило размер скомпилированной программы ни на байт. Ради проверки удалила из верхушек создаваемых pas-файлов подключения всех неиспользуемых библиотек (то, о чём Guyver писал) - выгоды от этого также не обнаружилось.
Название: Re: Помощь по Delphi
Отправлено: Mefistotel от 19 Март 2009, 15:29:00
Вот тебе и говорят, не заморачивайся ты на размере. 800 килобайт - это мизер... Имхо, главное - функциональность.
После освоения дебага вообще перестал пользоваться коррупторами. Даже забыл о них. Но твою улучшенную версию обязательно посмотрю. Для новичков такие программы просто незаменимы.
Название: Re: Помощь по Delphi
Отправлено: Guyver от 19 Март 2009, 18:47:29
Просто дебаг не везде есть ;о)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 21 Март 2009, 23:26:20
Последние дни занималась доработкой деталей, наконец-то дело дошло до финальных испытаний. Но остался ещё один очень важный вопрос: КАК НАЗВАТЬ ПРОГРАММУ? *SCRATCH*  Так до сих пор окончательно и не определилась с названием. Не хочу называть просто какой-то там поганкой. Вот Вижуэл Поганка - это да, поганка: небольшая и слегка легкомысленная (хотя ошибок в работе так и не было обнаружено). Но для нового корруптора нужно что-то, олицетворяющее мощь, пусть и не наделённую большим интеллектом. Вещь получилась неслабая, но какая-то... сомнительной полезности. Напоминает мускулистого дикаря, который размахивает большой дубинкой, не совсем понимая, зачем это нужно. *F_HOBO*
Название: Re: Помощь по Delphi
Отправлено: Guyver от 22 Март 2009, 05:42:40
BlueHairLady, проверь почту...
Название: Re: Помощь по Delphi
Отправлено: JurasskPark от 22 Март 2009, 08:32:20
КАК НАЗВАТЬ ПРОГРАММУ? *SCRATCH*
Напоминает мускулистого дикаря, который размахивает большой дубинкой, не совсем понимая, зачем это нужно. *F_HOBO*

Назови Barbarian или Barbarous.  LOL
Название: Re: Помощь по Delphi
Отправлено: Guyver от 22 Март 2009, 15:43:19
"Приложению не удалось запуститься, поскольку qtintf70.dll не был найден..."

Вот такая петрушка вместо корруптора ;о)))
Название: Re: Помощь по Delphi
Отправлено: Guyver от 22 Март 2009, 15:51:40
Вижу опять траблы с тем, что прога просто так не запускается... В прошлый раз без среды не работала, а в этот без библиотеки ;о)))

qtintf70.dll: Библиотека, необходимая для ?запуска программ на Delphi, использующих CLX-компоненты - а если у пользователя нет такой бяки???
Название: Re: Помощь по Delphi
Отправлено: Джинни от 22 Март 2009, 16:31:57
Хм. Зачем было использовать CLX-компоненты? Стандартных разве недостаточно?
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 22 Март 2009, 19:03:59
"Приложению не удалось запуститься, поскольку qtintf70.dll не был найден..."
Ну вот, а я-то думала, что все проблемы уже решены.  *F_CRY*  Даже скриншоты для инструкции уже сделала.
*F_CRY* *F_CRY* *F_CRY*
  *F_RAIN*


Хм. Зачем было использовать CLX-компоненты? Стандартных разве недостаточно?
CLX... Отправилась читать Википедию. Пожалуй, ссылку на неё нужно переместить на главную панель браузера.


Никаких специальных CLX-компонентов я не подключала, но использовала 3 нестандартных. Увы, но стандартных здесь явно недостаточно. Среди них нет ни цветной кнопки, ни специализированного поля ввода 16-ных цифр. Если использовать стандартные и корректировать их работу в самой программе - то получится такое нагромождение процедур, разобраться в котором человеку практически нереально. %) Иначе бы этот корруптор я ещё летом написала.

Пойду читать, как создавать устанавливаемые приложения. Хотелось бы обойтись без этого, корруптору желательно быть мобильным - но похоже, не получится.
Название: Re: Помощь по Delphi
Отправлено: Guyver от 23 Март 2009, 11:04:13
Помню я помогал делать базу игровых приставок - писал для неё программу. Это была оболочка, которая скачивала с инета обновления в зипе, потом сама их распаковывала и уже отображала. При закрытии опять запаковывала. Был нестандартный компонент распаковки-запаковки, который тоже использовал ДЛЛ-ку. Так вот - я просто с прогой этот ДЛЛ поставлял - достаточно было его в ту же папку, где и прога бросить - и всё работало... Но это, конечно, не самый лучший выход из положения... Пришлось делать установщик проги - чтобы он сам кидал всё в папку п програм файлс... Но зато появлялась иконка на раб. столе, а в папке с прогой были файлы ридми, ini, иконка и exe - всё как у сУрьёзной программы ;о)))
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 23 Март 2009, 12:01:00
Вдруг вспомнила, что на моём компьютере не одна операционная система, а две. Одной я активно пользуюсь, а вторая резервная. Если вдруг что-то с первой случится (а у меня это не редкость), катастрофой это не станет. Такой подход себя уже оправдал.

Ну так вот, в резервной системе у меня Delphi не установлена. Запустила свой корруптор через неё - точно, не работает. Банально скопировала файл qtintf70.dll (объёмом 4 Мб) в соответствующую папку - всё запустилось. Вот только ещё почему-то диаграммы выглядывают за границы окна... Новая проблемка... Приходите ко мне в гости, покажу самый мощный из коррупторов, на моём компьютере работает безглючно. o:)  Но в других местах почему-то возникают петрушка с редиской...*F_CONFUSED* Продолжу разбираться.


P.S.
Но сначала погуляю. Сегодня у нас прохладно, но солнечно. Обожаю солнце!
Название: Re: Помощь по Delphi
Отправлено: Guyver от 23 Март 2009, 12:53:52
Я делал прогу в ХР - в Висте она выглядела очень криво... Тогда пересел на Висту - теперь для ХР прога выглядит нормально... Все траблы тоже с окнами и их размерами были...
Название: Re: Помощь по Delphi
Отправлено: Guyver от 25 Март 2009, 13:51:40
Теперь прога работает, но у меня в Висте она не помещается в своё окно...

Потом, например размер файла 10 h... когда я ставлю пределы изменяемых величин на самое последнее значение от 10 h до 10 h, то возникает Range check Error и прога виснет... Надо обработать такую исключительную ситуацию...

Эта же ошибка возникает тогда, когда файл изменяется весь сразу... От самого начала до самого конца... Но не в первый, а во второй раз - когда делаешь то же самое...
Название: Re: Помощь по Delphi
Отправлено: Guyver от 25 Март 2009, 13:54:37
В общем, пока прога практически не работает ;о) Где-то сидит ошибка... В границах изменяемого участка...
Название: Re: Помощь по Delphi
Отправлено: Guyver от 25 Март 2009, 14:00:18
Точнее в самом последнем значении файла, как только прога до него доходит - висяк, а если до него ещё 1 символ - всё нормально... На то, что прога вносит в файл - ещё не смотрел...
Название: Re: Помощь по Delphi
Отправлено: Zalbard от 25 Март 2009, 14:01:15
Не женское это дело - программировать. :) Лучше бы вкусное что-нибудь нам готовила.
Название: Re: Помощь по Delphi
Отправлено: Guyver от 25 Март 2009, 14:20:40
Хекс компонент в самом низу - как я понял, он останавливается на последнем байте, который был изменён?

Может лучше сделать в нём показ всего диапазона изменённых байт со скроллбаром вертикальным? А можно 2 окна таких - до и после... Я как раз в своей проге такую вещь сделал в новой версии... Удобно анализировать...

Работать только с каждым Х-ым байтом... Например со вторым, а прога-то начинает работу с первого байта в диапазоне ;о) Парадокс получается ;о))) Надо как-то по-другому написать?

С анализатором закономерностей пока не понял как работать... Не запускается он у меня... Хотя с виду вещь нужная...
Название: Re: Помощь по Delphi
Отправлено: Guyver от 25 Март 2009, 14:23:15
О-ё-ё-й... Сейчас кажется у кого-то карма начнёт уменьшаться ;о)))
Название: Re: Помощь по Delphi
Отправлено: Zalbard от 25 Март 2009, 15:39:31
Оу? Всё, молчу тогда.)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 25 Март 2009, 19:33:30
Долго тупо смотрела в окно...

Теперь прога работает, но у меня в Висте она не помещается в своё окно...
Висты у меня нет. И если честно, я её даже никогда не видела. К сожалению, здесь я ничего придумать не способна.

Потом, например размер файла 10 h... когда я ставлю пределы изменяемых величин на самое последнее значение от 10 h до 10 h, то возникает Range check Error и прога виснет... Надо обработать такую исключительную ситуацию...

Эта же ошибка возникает тогда, когда файл изменяется весь сразу... От самого начала до самого конца... Но не в первый, а во второй раз - когда делаешь то же самое...
Пытала программу долго и упорно. Ну не возникает у меня здесь никаких ошибок! Не знаю почему, ну нету у меня зависаний! Нету!! Ну не могу я ничего с этим поделать!

В общем, пока прога практически не работает
Уже сколько над программой изголяюсь - и ни одной ошибки! Ну дайте мне щелбан!

Быть может, это из-за того, что я там, где нужно вставлять значение типа Byte, использовала значения типа Integer, рассчитывая на то, что преобразование произойдёт автоматически? А оно происходит не во всех операционных системах...

Хекс компонент в самом низу - как я понял, он останавливается на последнем байте, который был изменён?
Имеешь в виду текстовые поля, где выводится образец хекс-кода из файла? В них показывается начало участка, который был изменён, анализируется или просто выбран на диаграмме. Я ведь вроде везде там проставила небольшой поясняющий текст... А длинные объяснения к компонентам там оставлять просто негде.

Может лучше сделать в нём показ всего диапазона изменённых байт со скроллбаром вертикальным?
Неплохая идея. Но для этого нужно переписать значительную часть кода, а у меня сейчас мало времени. Возможно, когда-нибудь в будущем.

А можно 2 окна таких - до и после...
Снова не поняла... У меня ведь там две строки: верхняя показывает первоначальное состояние данного участка, а нижняя - в данный момент времени. Как раз и сделала это для того, чтобы можно было изменения отслеживать. Чувствуется, недостаточно пояснительного текста, но куда его там пихать? Может, попытаться сделать какие-нибудь контекстные подсказки?


Guyver, как я поняла, ты все испытания в Висте проводил? Похоже, мой корруптор для неё не подходит. Пусть тестирование будет открытым: http://bhlady.narod.ru/other/MyNewCorruptor.7z (это чуть оптимизированная версия, чем я Guyver-у отправила, но по существу то же самое).
Zalbard, если поможешь, разрешу сводить себя в пиццерию. (Когда я в последний раз пиццу ела? Всего несколько раз за всю жизнь! Украдкой!)
Название: Re: Помощь по Delphi
Отправлено: Griever от 25 Март 2009, 19:48:54
Потом, например размер файла 10 h... когда я ставлю пределы изменяемых величин на самое последнее значение от 10 h до 10 h, то возникает Range check Error и прога виснет... Надо обработать такую исключительную ситуацию...
Эта же ошибка возникает тогда, когда файл изменяется весь сразу... От самого начала до самого конца... Но не в первый, а во второй раз - когда делаешь то же самое...
Пытала программу долго и упорно. Ну не возникает у меня здесь никаких ошибок! Не знаю почему, ну нету у меня зависаний! Нету!! Ну не могу я ничего с этим поделать!
?
Цитировать (выделенное)
Небольшой выигрыш даёт снятие флажков с Range checking и Overflow checking в опциях компилятора (правда они по умолчанию и так должны быть сняты). Снятие флажков с I/O checking и со всех пунктов в группе Debugging не уменьшило размер скомпилированной программы ни на байт.

Цитировать (выделенное)
Zalbard, если поможешь, разрешу сводить себя в пиццерию.
(http://lurkmore.ru/images/thumb/a/ae/Facepalm_kyon.jpg/130px-Facepalm_kyon.jpg)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 25 Март 2009, 20:02:06
Griever, не совсем понимаю, что ты имеешь в виду. Думаешь, что это из-за того, что я в настройках компилятора сняла контроль за всевозможными переполнениями? Свои тестирования я также проводила при данных отключённых опциях, уверена, за границы там ничего не выходит. Ведь не является же ошибкой, к примеру, такой код:

var i: Integer;
     bt: Byte;
----------------
i := 5;   //т.е. значение от 0 до 255
bt := i;
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 25 Март 2009, 20:08:09
Кстати, насчёт той злополучной библиотеки qtintf70.dll . Перекопала из-за неё весь код программы, но всё же нашла то, что её вызывает. И это что-то называется QControls. Дети, запомните, никогда не нужно произносить это плохое слово! Самое интересное, что после лёгкой правки кода размер программы сразу же сократился на 30%! LOL


Оказывается, что это целая наука: сделать так, чтобы программа корректно отображалась в различных ОС. Да что там в различных системах, даже при различных настройках одной и той же системы - и то целая проблема. Более того, в зависимости от настроек даже ошибки в работе могут возникать или не возникать! *F_INSANE*
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 25 Март 2009, 22:05:16
P.S.
Ой, снова нельзя сообщение отредактировать.
Прошлое высказывание касалось не последнего затруднения, а то как я до этого искала ошибку с qtintf70.dll, выравнивала диаграммы и т.п. Делала изменения в коде, перезагружала компьютер в другую ОС (в смысле, тоже XP Home, но с другими настройками) и смотрела на результат. И так десятки раз! Ужас!! В одной XP Home есть ошибка, в другой XP Home нет. И не совсем понятно, почему. Ну вот, снова болтаю без дела. *MALVINA3*
Название: Re: Помощь по Delphi
Отправлено: Zalbard от 25 Март 2009, 22:39:54
Zalbard, если поможешь, разрешу сводить себя в пиццерию. (Когда я в последний раз пиццу ела? Всего несколько раз за всю жизнь! Украдкой!)
Всё, договорились. *FRIENDS* Как буду в Гонолулу, сразу откормлю тебя пиццей. А пока:
(http://pic.ipicture.ru/uploads/090325/8i5hERV8Rc.jpg)
Всё, больше оффтопить не буду. По теме:
Можешь ещё Сравнилку прямо в Ромкор добавить, будет ещё удобнее. :)
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 26 Март 2009, 00:06:14
Можешь ещё Сравнилку прямо в Ромкор добавить, будет ещё удобнее.
Не вижу смысла. Программы слишком разные. Только путаница будет.

Ах да, чуть не забыла.
Работать только с каждым Х-ым байтом... Например со вторым, а прога-то начинает работу с первого байта в диапазоне ;о) Парадокс получается ;о))) Надо как-то по-другому написать?
Такой эффект и задуман. Первый байт изменяемого участка обрабатывается абсолютно всегда, а дальше - через указанный интервал. По-моему, довольно логично. Разве что немного уточнить формулировку? Если кто-то может более точно определить суть той или иной команды, я непременно подправлю соответсвующую надпись.


Бегло, поверхностно пообщалась с парой человек. Всё же похоже, что все вышеуказанные проблемы - именно из-за нестыковки моей программы с Вистой. Увы, но похоже Ромкор с Вистой не сочетается. Это программа для XP, там проблем быть не должно.
Название: Re: Помощь по Delphi
Отправлено: Guyver от 26 Март 2009, 12:06:37
Это не отмазка - давай делай нормально чтоб было!!!! ;о) Я вот могу поспорить, что прога криво идёт не только в одной Висте ;о))) И я готов это доказать!!!

Если что - шли исходники мне - я их к Висте попробую приучить, и с размерами окон лучше будет - достаточно изменить их в Висте, а на ХР они останутся такими же... У меня так было...
Название: Re: Помощь по Delphi
Отправлено: Джинни от 26 Март 2009, 13:45:34
Чтобы с окнами не было проблем в разных виндоус-системах нужно использовать свойства Align, Anchors, ClientWidth, ClientHeight.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 27 Март 2009, 11:51:41
Для большей понятности решила ко всем элементам добавить небольшие всплывающие подсказки (свойство Hint). Естественно, отключаемые. Но уж слишком быстро они исчезают, за 5 секунд не все из них успеваешь целиком прочесть. Скажите пожалуйста, а в Delphi7 есть возможность сделать так, чтобы они отображались большее время? *F_QUESTION* Скажем, секунд 20?
Название: Re: Помощь по Delphi
Отправлено: Guyver от 27 Март 2009, 13:21:03
Свойство - HintPause
Затрагиваемые объекты   - TApplication
Назначение - Свойство HintPause определяет период времени, которое должно пройти перед отображением подсказки.
Объявление - property HintPause: Integer;
Пример синтаксиса

procedure TForm1.FormCreate(Sender: TObject);
begin
// Установить HintHidePause в 5 секунд
   Application.HintHidePause := 5000;
// Установить HintPause в 1 секунду
   Application.HintPause := 1000;
end;

Описание - Когда мышь находится над компонентом, который будет отображать подсказку, перед собственно отображением возникает небольшая пауза. Продолжительность паузы определяется свойством HintPause и измеряется в миллисекундах. По умолчанию пауза равна 800 миллисекунд. Подсказки доступны через свойство Hint различных компрнентов.
Название: Re: Помощь по Delphi
Отправлено: Guyver от 27 Март 2009, 13:26:18
П.С. теперь в Висте всё работает, кроме того, что программа не влазит в окно по ширине и длине - появились вертикальный и горизонтальный скроллбары...
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 29 Март 2009, 12:23:55
Теперь всё работает даже в Висте! *F_GLASSES* (Вернее, должно работать, самая последняя редакция ещё не проверялась). Забавно пытаться запустить своё приложение в ОС, о которой ты совершенно ничего не знаешь.:D Спасибо Guyver-у за то, что послужил моими глазами. *FRIENDS* (Вот где бы ещё найти парочку человек, чтобы один работал моими руками, а второй - моей головой. ^,^)


Если это кому-то интересно, то сбои происходили вследствие того, что XP и Vista немного по-разному работают с памятью, отведённой различным динамическим массивам. Виста не всегда "понимает", что может существовать пара ячеек, необходимых просто для чёткой структуры, без конкретного содержания.

Для правильного же определения размеров формы в различных ОС я использовала выражения вида
var d: Integer;
.............
d := ClientOrigin.X-Left;
Constraints.MaxWidth := 646+d*2;
Constraints.MinWidth := Constraints.MaxWidth;
Constraints.MinHeight := 625+ClientOrigin.Y-Top+d;


Информация для тех, кто успел скачать бетку: она хромает, лучше стерите.
Название: Re: Помощь по Delphi
Отправлено: BlueHairLady от 30 Март 2009, 18:55:45
Ну теперь уж точно всё! Все мелкие поправки и дополнения, которые хотела сделать, внесла. Краткую инструкцию об особенностях программы написала. Барабанная дробь: http://bhlady.narod.ru/programs/romcor.htm .

Надеюсь, что из-за небольшой спешки в последние дни нигде не сглупила, за лишнюю проверку буду благодарна.

Есть идеи по дальнейшему улучшению, но для этого нужно серьёзно модернизировать код. А у меня сейчас на это нет больше времени. Так что возможно..., быть может..., когда-нибудь..., мне бы самой хотелось..., но не сейчас.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 24 Декабрь 2009, 23:09:14
Скажите, а  как можно присвоить свою таблицу символов?
inttostr?
и как выделить, значения до '=', чтобы читал, как хекс и присваивал ему букву или слово?
Название: Re: Помощь по Delphi
Отправлено: Джинни от 25 Декабрь 2009, 08:41:47
В цикле обрезать, ну или с помощью Pos и Copy.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 25 Декабрь 2009, 10:24:58
ТАк-c, с этим понятно, а чтобы если увидет, например значение '$4056=You', чтобы инк равный $4056 выводит вданое слово, конечно, можно самому сделать, но мне интерено, как сделать, чтобы он из таблы это читал...
Название: Re: Помощь по Delphi
Отправлено: Джинни от 25 Декабрь 2009, 13:30:24
? загрузить таблицу в память и читать.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 26 Декабрь 2009, 16:05:09
Все, разобрался=)
пришлось функцию добавить hextoint, чтобы из тоблы присваивалось=)
Пока конечно чуть не корректно, там иногда символы вылазят не те, но это поправимо)
Он пока знаки припенания и пробел не ставит LOL
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 26 Декабрь 2009, 16:53:55
все, норм ставит, только скорость подкашивает+))))
Название: Re: Помощь по Delphi
Отправлено: Oraculum от 26 Декабрь 2009, 17:02:08
А что ты делаешь? :)
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 26 Декабрь 2009, 17:02:40
An unknown building.
  A Sorcerer's Guild.  You feel eyes watching you.
  A Guild of the Knights of the Holy Order of Separation.  Clanks and bangs emerge from within.
  An Archer's Guild.
  A creepy Necromancer's Guild.

вот такой кусок он 5-10 секунт выдерает=)

0001=An
0002=unknown
0003=building
...
CD88=version?
CD89=errors?
CD8A=differences?
может из-за такого кол-ва долго мутит?
Oraculum
да для игрухи одной=)
----------------------
код:
tbl[hextoint(copy(form1.memo1.lines.strings,1,4))]:=copy(form1.memo1.lines.strings,6,length(form1.memo1.lines.strings)-6);
..........
 s:=tbl[swap(buf)]
.....
form4.memo1.SelText:=s;
Название: Re: Помощь по Delphi
Отправлено: Джинни от 27 Декабрь 2009, 10:01:57
жёстко
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 27 Декабрь 2009, 13:31:04
А в чем жесть то?
из-за обширной таблици?
Или что?
Название: Re: Помощь по Delphi
Отправлено: Джинни от 27 Декабрь 2009, 14:09:45
из-за 5 секунд на 3 строки

tbl[hextoint(copy(form1.memo1.lines.strings,1,4))]:=copy(form1.memo1.lines.strings,6,length(form1.memo1.lines.strings)-6);

form1.memo1.lines.strings загрузи в одну переменную хотя бы, а не вызывай тысячу раз кучу повторного кода.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 27 Декабрь 2009, 14:14:17
ТАблица в 169 кб выдирается за 1 минуту.
А тут 6 кб текста тоже за одну минуту=)
а в чем проблема, не знаешь?
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 27 Декабрь 2009, 15:46:30
Усё, скорость 2 раза быстрея *NЕ_HOCHU*
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 11 Февраль 2010, 10:30:12
а есть команда на делфи, типо ASL, сдвиг влево, вправо?
чтобы был переход 01111111 =>11111110=>11111101 и т.д.
а то бесит всевремя писать inttobin(..,..), и как бы вручную перетаскивать=(
Название: Re: Помощь по Delphi
Отправлено: Oraculum от 11 Февраль 2010, 13:09:51
01111111 =>11111110=>11111101
Ты сначала показал пример ASL, а потом уже почему-то ROL. Правильный пример ASL:
001111111 =>
011111110 =>
111111100
Аналог ASL на языке Delphi - SHL.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 11 Февраль 2010, 14:02:42
Видишь ли, есть сдвиги с дублированием последнего бита. А снес ASL - который я указал. Переменная же разной бывает=)
Спасибо :)
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 11 Февраль 2010, 14:10:55
т.е. последний бит переходит в начало
Название: Re: Помощь по Delphi
Отправлено: Oraculum от 11 Февраль 2010, 14:22:03
Видишь ли, есть сдвиги с дублированием последнего бита. А снес ASL - который я указал. Переменная же разной бывает=)
Спасибо :)
т.е. последний бит переходит в начало
Это уже повороты, а не сдвиги.  :)
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 11 Февраль 2010, 14:24:13
но сдвиг то идет на одну, а последний байт тупо переходит в начало, короче запущенная система там=)
Сапсибо, но придеться опять своим методом делать  LOL
Название: Re: Помощь по Delphi
Отправлено: Джинни от 12 Февраль 2010, 09:19:15
но сдвиг то идет на одну, а последний байт тупо переходит в начало, короче запущенная система там=)
Сапсибо, но придеться опять своим методом делать  LOL
Ты говоришь про ROL, а не про ASL.
В делфи реализуется сдвигом с условием с помощью AND.
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 12 Февраль 2010, 09:34:42
нее, ASL, тебе исходники может еще кинуть=))))
Название: Re: Помощь по Delphi
Отправлено: gegmopo3 от 12 Февраль 2010, 11:57:37
все! Вы правы были, просто сначало ASL шло, а после ROL, не угледел я=)
Еще же думал что-то не то, никогда такого не было=) [***] я затиупил вообще=)))))))
Название: Re: Помощь по Delphi
Отправлено: dnd1 от 25 Сентябрь 2010, 21:54:50
Скромный вопросик: можно ли каким-то более красивым способом реализовать запись Integer(4 байта) в файл в порядке BigEndian? (Запись через поток TFileStream)
Swap меняет местами 2 первых байта и 2 последних
а кусок кода
Код: delphi [Выделить]

       i:= sec.Size;
       s:=IntToHex(i, 8);
       i:=StrToInt('$' + Copy(s,7,2) + Copy(s,5,2) + Copy(s,3,2) + Copy(s,1,2));

считаю не такой уж и грамотной реализацией :(
Название: Re: Помощь по Delphi
Отправлено: Джинни от 26 Сентябрь 2010, 06:09:58
Код: delphi [Выделить]
function SwapInt(Value: Integer): Integer;
asm
 bswap eax
end;

//...............
var X: Integer; Stream: TFileStream;
//...........
X := SwapInt(X);
Stream.WriteBuffer(X, 4);


Но есть и простые арифметические методы, чего извращаться с переводом в string и обратно? :)
Например:
Код: delphi [Выделить]

 X := X shr 24 + (( X shr 16) and $FF) shl 8 + (( X shr 8 ) and $FF) shl 16 + X shl 24;
Название: Re: Помощь по Delphi
Отправлено: dnd1 от 26 Сентябрь 2010, 21:47:55
Джинни, спасибо . Всегда думал, что нужно выучить ассемблер, и вот тому еще одно доказательство.
чего извращаться с переводом в string и обратно?
Просто никогда езще не работал со сдвигами, так что как умел, так и попытался реализовать. :)
Название: Помощь по Delphi
Отправлено: TrickZter от 09 Декабрь 2010, 11:02:26
Нашёл интересный компонент: TPNGImage, возможно, кому-нить пригодится :)
http://delphidevelop.ru/publ/12-1-0-174

Добавлено позже:
Что-то не могу сообразить, как конвертнуть Cardinal (или массив из 4-х байтов) в TColor притом чтобы альфу не перекосило.
Название: Помощь по Delphi
Отправлено: Джинни от 09 Декабрь 2010, 11:56:47
Что-то не могу сообразить, как конвертнуть Cardinal (или массив из 4-х байтов) в TColor притом чтобы альфу не перекосило.
Хох, а зачем тебе это? TColor вроде бы альфу не поддерживает. Есть специальные классы для работы с изображениями с альфой.
Название: Помощь по Delphi
Отправлено: TrickZter от 09 Декабрь 2010, 12:10:49
Мне нужно конвертить 32-битные Hip'ы в какой-нибудь привычный 32-битный формат и обратно. 24-битный формат не катит, так как я теряю при конвертации 8 бит информации о цвете (альфа-канале). Вот думаю, как это реализовать.
Название: Помощь по Delphi
Отправлено: Джинни от 09 Декабрь 2010, 12:53:11
Я же говорю, есть классы. TDIB32 например какой-нибудь, если я правильно помню название.

Мне нужно конвертить 32-битные Hip'ы в какой-нибудь привычный 32-битный формат и обратно. 24-битный формат не катит, так как я теряю при конвертации 8 бит информации о цвете (альфа-канале). Вот думаю, как это реализовать.
Имелось в виду, зачем тебе именно в TColor конвертировать, ведь он альфу не поддерживает. :)
Название: Помощь по Delphi
Отправлено: TrickZter от 09 Декабрь 2010, 13:02:24
Хотел без особых плясок с бубном сразу отрисовывать картинку на канве TImage :)
Но я тут побаловался чуток с буржуйской прогой (Hipster), оказалось, что в img.pac она корректно конвертит и инсертит пныги. Остальное собрал своим RePACer'ом и игрушка нормально заработала. В общем, мне меньше работы :) Хотя, как-нибудь надо будет попробовать свой конвертер с альфой написать.
Название: Помощь по Delphi
Отправлено: JurasskPark от 03 Март 2013, 08:48:09
TrickZter, а такой компонент не подойдёт???  :'(
http://www.alphaskins.com/index_rus.php (http://www.alphaskins.com/index_rus.php)
Цитировать (выделенное)
Для жителей стран СНГ все компоненты являются бесплатными (независимо от того - коммерческий проект или нет). Платой за пользование могут быть Ваши критические замечания, советы, сообщения об ошибках и т.д.

Пароль для распаковки - слово "сканирование", набранное маленькими русскими буквами в английской раскладке.
Название: Помощь по Delphi
Отправлено: TrickZter от 03 Март 2013, 10:24:20
TrickZter, а такой компонент не подойдёт???  :'(
Не знаю, может быть вообще без скрытия сделаю.