Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4

Модерирует : ShIvADeSt

ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

EX_unfreqient

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
...но тогда просто надо не инсталировать шрифты и всё. Просто положить их рядом в папке с программой. И можно будет использовать  в приложении просто указав имя

Шрифты убраны в exe-шник. При запуске они в виде файлов направляются в виндовый \Temp. Проблема в том, что иногда они "отваливаются". Вчера, всё таки, добавил копирование файлов в \Fonts перед AddFontResource. Может будет вести себя стабильнее. Почему не хотелось ставить "навсегда" - лицензия только на 5 наборов шрифтов.

Всего записей: 3 | Зарегистр. 07-02-2008 | Отправлено: 09:58 18-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Странные у вас лицензии.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:15 18-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Необходимо создать в реестре строковый параметр в реестре и записать в него значение. Строковый параметр необходимо создавать каждый раз новый. Что-то подобное, что создает редактор реестра - "Новый параметр #1" и так далее. И в уже этот параметр писать строку. Есть функция:
 
function SetString(RootKey : HKEY; Key, Name : String) : Boolean;
begin
  Result := Bool(RegSetValue(RootKey, PChar(Key), REG_SZ, PChar(Name), Length(Name) + 1));
end;
 
Я немного недогоняю как создать параметр не тот который по умолчанию, а с нужным мне названием.  Необходимо использовать RegSetValueEx? Но там перед типом создаваемой строки нужен нолик. И не туда ни сюда. Я немного запутался...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:28 18-06-2008
LordMAD



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RegCreateKeyEx/RegOpenKeyEx + RegSetValueEx
или просто воспользоваться TRegistry

Всего записей: 378 | Зарегистр. 01-10-2002 | Отправлено: 09:04 19-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LordMAD
TRegistry не захотелось использовать. Пришлось сделать так.=)
 

Код:
function SetRegistryString(RootKey : HKEY; Key, Name, Value : String) : Boolean;
var
  RegKey : HKEY;
  DataType : DWORD;
begin
  if (RegCreateKeyEx(RootKey, PChar(Key), 0, nil, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, nil, RegKey, @DataType) = ERROR_SUCCESS) then
    begin
      RegSetValueEx(RegKey, PChar(Name), 0, REG_SZ, PChar(Value), Length(Value) + 1);
      RegCloseKey(RegKey);
      Result := TRUE;
    end
  else
    begin
      RegCloseKey(RegKey);
      Result := FALSE;
    end;
end;

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 13:40 19-06-2008
SergBSI

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскаже может кому попадался готовый проект с примером - Задача нужно из XML файла загнать данные в базу но причем структура XML может несколько отличаться раз от раза Поэтому необходимо вначале указать куда какое поле

Всего записей: 517 | Зарегистр. 09-12-2003 | Отправлено: 08:59 21-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кто делал фичу HitTest у ListView? Необходимо сделать всплывающую тултипку над элементом. Надо чтобы в некй отображался текст с пункта элемента.  Тултип я сделаю, но как вообще правильно обработать HitTest?
Применил к контролу стиль LVS_EX_INFOTIP. И как теперь в LVN_GETINFOTIP обрабатывать эту кашу?

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 10:58 23-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, и еще надо преобразовать DWORD в String. Вроде стандартной делфевской функции такой не нашел.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 18:14 23-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988
кто сказал нет?
самая классическая - IntToStr
старая паскальная str(k:4,s);, где 4 - это кол-во знакомест под вывод.
ну и не забываем о Format('',[]);
если пишешь на чистом апи, то можно виндовую sprintf, правда прийдётся чуточку помучиться с передачей параметров.
Заметка: DWORD - это обычный паскальный LongWord, 4 байта, без знака.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 19:22 23-06-2008
Frodo_Torbins

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо работать с рисунками имеющими альфа-канал. Особо интересует наложение одного такого рисунка на другой. Может кто видел готовые функции, или знает, как это сделать?

Всего записей: 2319 | Зарегистр. 24-05-2007 | Отправлено: 21:41 23-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
 
Блин, тут я запутался. Необходимо удалять ключ реестра. Вот функция для этого:
 

Код:
 
function DeleteRegistryKey(RootKey : HKEY; Key, Name : String) : Boolean;
var
  RegKey : HKEY;
begin
  if RegOpenKeyEx(RootKey, PChar(Key), 0, KEY_READ or KEY_WRITE, RegKey) = ERROR_SUCCESS then
    begin
      RegDeleteValue(RegKey, PChar(Name));
      RegCloseKey(RegKey);
      Result := TRUE;
    end
  else
    begin
      RegCloseKey(RegKey);
      Result := FALSE;
    end;
end;
 

 
Необходимо правильно передать параметры в функцию. Вот тут облом...
Есть переменные

Код:
 
  RegBufRoot : HKEY;
  RegBufName : String;
 

Инициализирую так их:

Код:
 
            RegBufRoot := CheckComboRootKey(Cmbx_GetText(GetDlgItem(hChg, ID_CMBX_ATRN_RKEY)));
            RegBufName := PChar(CheckComboNameKey(Cmbx_GetText(GetDlgItem(hChg, ID_CMBX_ATRN_RKEY))));
 
 

Вот функции самописные:

Код:
 
function CheckComboRootKey(RootKey : String) : Longint;
begin
  if (String(RootKey) = StrTxtFrq[0]) then Result := HKEY_LOCAL_MACHINE;
  if (String(RootKey) = StrTxtFrq[1]) then Result := HKEY_LOCAL_MACHINE;
  if (String(RootKey) = StrTxtFrq[2]) then Result := HKEY_CURRENT_USER;
  if (String(RootKey) = StrTxtFrq[3]) then Result := HKEY_CURRENT_USER;
  Result := Result;
end;
 
function CheckComboNameKey(RootKey : String) : String;
begin
  if (String(RootKey) = StrTxtFrq[0]) then Result := HKEY_RUN;
  if (String(RootKey) = StrTxtFrq[1]) then Result := HKEY_RUNONCE;
  if (String(RootKey) = StrTxtFrq[2]) then Result := HKEY_RUN;
  if (String(RootKey) = StrTxtFrq[3]) then Result := HKEY_RUNONCE;
  Result := Result;
end;
 

 
Функция Cmbx_GetText просто получает текст с текущего пункта в Комбобоксе. Проблем с этим нет. Проблема как это все запихнуть в DeleteRegistryKey, а именно в RootKey и Key ее параметры. RegBufRoot и RegBufName не сохраняется почему-то после инициализации. Хотя по идее RegBufName вообще не должна изменяться. Я вообще в процессе работы не меняю эти значения.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 21:50 23-06-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Поиск помогает... например: http://www.swissdelphicenter.com/en/showcode.php?id=2029
 
Maks150988
Не обижайтесь, но у вас очень особый стиль... Почему функция, которая возвращаеть string (CheckComboNameKey), надо делать typecast к PChar, что бы присвоит на RegBufName, которая string? Почему параметру RootKey, которой string, надо делат typecast к strign?  А про "Result := Result" вообще молчу.
Сможете ли дать какой-то маленкий пример, которой возможно протестировать? А то сейчас неясно что получается.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 09:31 24-06-2008 | Исправлено: Mandor Sawall, 09:44 24-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988

Цитата:
String(RootKey)

Зачем так писать???

Цитата:
  Result := Result;

А это похоже на индуское созерцание присваивания, для надёжности. Компилятор то выбросит, скорее всего.
Может почитать пару книг по чистому С (да, тут надо по чистому С читать - только там пишут о подобных выкрутасах)?

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 11:21 24-06-2008
kkRiz

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Компилятор то выбросит, скорее всего

 
Если оптимизация включена. А если нет - можно до упора дебажить откуда лезет рэндомный мусор в программе

Всего записей: 206 | Зарегистр. 11-05-2006 | Отправлено: 11:39 24-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
kkRiz

Цитата:
лезет рэндомный мусор

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

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 12:46 24-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да пришлось с резальтами накосячить, потому что компилятор фырчит что функция якобы не будет проинициализирована. Понимаю что это борщ, однако для надежности все понасовал...
Я еще просто не оптимизировал код. Пытаюсь пока скелет работоспособный сделать.
 
http://webdrive.avtograd.ru//Download/Explorer/Delphi%20WinApi%20sources/Registry_AutoRun_Editor_1.0.0.0.rar
 
Просто пытаюсь авторан едитор натворякать опенсорсный. Просто глянул такую фичу в YourUninstaller и захотелось наподобие сделать. Только чтоб бесплатный был.

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 13:04 24-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988
оптимизировать не надо. надо просто нормально написать. Например

Код:
 
function CheckComboNameKey(RootKey : String) : String;  
begin  
  if (RootKey = StrTxtFrq[0]) or (RootKey = StrTxtFrq[2]) then Result := HKEY_RUN else
  if (RootKey = StrTxtFrq[1]) or (RootKey = StrTxtFrq[3]) then Result := HKEY_RUNONCE else
  result := '';
end;
 

Разницу ощущаешь? и ещё раз скажу, это не оптимизация, а просто корректное написание. Именно оно помогает избежать как минимум половину ошибок.

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 14:26 24-06-2008
Maks150988



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
OdesitVadim
Да я так и хотел сделать. Потом не до этого было. Тем более есть еще некоторые функции, которые нужно корректно переписать. Все равно еще рановато. Один фиг кучу раз еще код можно перелопатить...
 
P.S. помойму даже в платных программах код поди мусорный и с неправильными конструкциями. Главное лишь бы работало...

Всего записей: 836 | Зарегистр. 23-12-2006 | Отправлено: 15:09 24-06-2008
OdesitVadim



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Maks150988
А ты как думаешь, почему они исходники не открывают? Страшно показывать - заклюют.

Цитата:
Главное лишь бы работало.

И что бы добавить одну опцию в программу прийдётся перелопатить полкода...

----------
Press any key to continue or any other key to exit
Пишите так, чтобы не было стыдно за нобелевскую премию.

Всего записей: 1568 | Зарегистр. 19-09-2003 | Отправлено: 16:16 24-06-2008
Mandor Sawall

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maks150988
Ето правда (что в платных программах есть мусорный код и т.д.), но такой стиль вообще не говорит хорошо о вас. Таким образом вы затрудняете даже нас - тем, от которым хотите помощ.
 
Изпробовал код - не увидел проблема; кстати, можно вызват диалог даже если не выбран елемент из списка - тогда RegBufRoot и RegBufName не именют валидные стойности.
CheckComboRootKey() возвращает Longint, а должен возвращать HKEY (или LongWord, или DWORD, но никак не знаковой тип).
 
Кстати, если изпользувать локалная переменная для цикл, генерится более ефективной код, чем при изпользувание глобальной такой. И компилятор не ругается...
 
Добавлено:
 
Кажется, понял... Наверное, проблем в том, что RegBufRoot и RegBufName получают стойности на WM_INITDIALOG, а използуются при WM_COMMAND, а они локалные. Ето два разные вызова, поетому стойности не сохраняются. Сделайте RegBufRoot и RegBufName глобальные.

Всего записей: 119 | Зарегистр. 20-03-2003 | Отправлено: 16:24 24-06-2008 | Исправлено: Mandor Sawall, 16:32 24-06-2008
   

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi (все версии) - часть 4
ShIvADeSt (28-06-2009 02:10): Продолжение в http://forum.ru-board.com/topic.cgi?forum=33&topic=10477


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru