Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (все версии) - часть 4

Автор: quickas
Дата сообщения: 16.06.2008 07:14
Огромная просьба, помогите решить:
Постановка задачи:
1. Номер минимального по модулю элемента массива.
2. Сумму модулей элементов массива, расположенных после первого отрица-тельного элемента.
Сжать массив, удалив из него все элементы, величина которых находится в интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями.
Автор: Frodo_Torbins
Дата сообщения: 16.06.2008 09:55
decu2007
2005 очень глючная, берите 2007: http://forum.ru-board.com/topic.cgi?forum=35&bm=1&topic=38537#1 разницы не заметите.
Автор: Antananarivu
Дата сообщения: 16.06.2008 14:01
Dimoniusis
А не можете выложить рабочую версию программы, которая соединяется с почтовым ящиком, скачивает и сохраняет в папочку все аттачи и текст письма... а то я что-то торможу. Еще лучше если кинете ссылочку на работающий проект или вышлете ее на почту "antananarivu83@mail.ru". Заранее огромное спасибо!
Автор: Mixanitch
Дата сообщения: 16.06.2008 22:48
Люди, помогите с задачкой. есть шаблон матрицы . нужно в stringgrid зафиксировать ненужные ячейки , чтобы в них нельзя было ввести и вид у них был как у фиксированных столбцов. или , например, зафиксировать несколько столбцов, а при нажатии на определённую ячейку фиксация снималась бы не со всего столбца, а только с этой ячейки.
Автор: EX_unfreqient
Дата сообщения: 17.06.2008 09:47
Коллеги! Дайте совет: нужно инсталлировать шрифты для приложения, делается это программно так
AddFontResource(PChar(FontFullFileName));
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
Перерыл весь интернет, везде одни и те же решения. За исключением того, что советуется копировать шрифты в папку Windows\Fonts\ или прописывать в реестре. Всё работает, НО, шрифты ПРОПАДАЮТ! Замечен такой "глюк" при котором можно "потерять" шрифты: загружаем ПК, открываем файл в Word, в котором используются эти шрифты до запуска приложения с инсталляцией - шрифты не отображаются, потому, что их нет. Всё логично. Закрываем Word. Потом запускаем приложение с инсталляцией шрифтов и видим, что шрифты не установились.
Может нужно как-то по другому инсталировать шрифты в систему, более надёжно. Или снять блокировки со шрифтов. Инсталлировать "навсегда" шрифты в систему не предлагайте.
Автор: OdesitVadim
Дата сообщения: 17.06.2008 10:23
Надёжно - это "навсегда". не надо будут - удаляйте. А ещё ворд умеет хранить шрифты внутри документа. может это, что надо?
Автор: AndreyAgrh
Дата сообщения: 17.06.2008 10:27
Может быть возможно встроить шрифт в документ?
Автор: EX_unfreqient
Дата сообщения: 17.06.2008 10:47
Цель - пользоваться шрифтами только из своего проложения. При запуске приложения, шрифты инсталируются, при закрытии удаляются. Но, при подобных методах установки, пользователи могут пользоваться этими шрифтами (нельзя запретить), а это приводит к "падению" шрифтов в системе. То есть, если шрифт, подобным образом "падает", то и файл шрифта при открытии становится "не таким" - при просмотре в Windows он как "пустой". Причём, вот шрифт есть, а потом вдруг падает. Происходило на многих ПК под XP.
Автор: Dimoniusis
Дата сообщения: 17.06.2008 12:11

Цитата:
А где взять сие чудо?
На сайте и взять. Оно бесплатное, Open Source и тд итп. И примеров куча на сайте же...

Antananarivu http://www.overbyte.be/eng/products/usermade.html - искать по "mail" на странице... примеров вполне достаточно


Автор: OdesitVadim
Дата сообщения: 17.06.2008 13:39
EX_unfreqient
Я конечно не понимаю, зачем понадобилось такое, но тогда просто надо не инсталировать шрифты и всё. Просто положить их рядом в папке с программой. И можно будет использовать в приложении просто указав имя.
Автор: EX_unfreqient
Дата сообщения: 18.06.2008 08:58

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

Шрифты убраны в exe-шник. При запуске они в виде файлов направляются в виндовый \Temp. Проблема в том, что иногда они "отваливаются". Вчера, всё таки, добавил копирование файлов в \Fonts перед AddFontResource. Может будет вести себя стабильнее. Почему не хотелось ставить "навсегда" - лицензия только на 5 наборов шрифтов.
Автор: OdesitVadim
Дата сообщения: 18.06.2008 10:15
Странные у вас лицензии.
Автор: Maks150988
Дата сообщения: 18.06.2008 20:28
Необходимо создать в реестре строковый параметр в реестре и записать в него значение. Строковый параметр необходимо создавать каждый раз новый. Что-то подобное, что создает редактор реестра - "Новый параметр #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? Но там перед типом создаваемой строки нужен нолик. И не туда ни сюда. Я немного запутался...
Автор: LordMAD
Дата сообщения: 19.06.2008 08:04
RegCreateKeyEx/RegOpenKeyEx + RegSetValueEx
или просто воспользоваться TRegistry
Автор: Maks150988
Дата сообщения: 19.06.2008 12:40
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;
Автор: SergBSI
Дата сообщения: 21.06.2008 07:59
Подскаже может кому попадался готовый проект с примером - Задача нужно из XML файла загнать данные в базу но причем структура XML может несколько отличаться раз от раза Поэтому необходимо вначале указать куда какое поле
Автор: Maks150988
Дата сообщения: 23.06.2008 09:58
Может кто делал фичу HitTest у ListView? Необходимо сделать всплывающую тултипку над элементом. Надо чтобы в некй отображался текст с пункта элемента. Тултип я сделаю, но как вообще правильно обработать HitTest?
Применил к контролу стиль LVS_EX_INFOTIP. И как теперь в LVN_GETINFOTIP обрабатывать эту кашу?
Автор: Maks150988
Дата сообщения: 23.06.2008 17:14
Да, и еще надо преобразовать DWORD в String. Вроде стандартной делфевской функции такой не нашел.
Автор: OdesitVadim
Дата сообщения: 23.06.2008 18:22
Maks150988
кто сказал нет?
самая классическая - IntToStr
старая паскальная str(k:4,s);, где 4 - это кол-во знакомест под вывод.
ну и не забываем о Format('',[]);
если пишешь на чистом апи, то можно виндовую sprintf, правда прийдётся чуточку помучиться с передачей параметров.
Заметка: DWORD - это обычный паскальный LongWord, 4 байта, без знака.
Автор: Frodo_Torbins
Дата сообщения: 23.06.2008 20:41
Надо работать с рисунками имеющими альфа-канал. Особо интересует наложение одного такого рисунка на другой. Может кто видел готовые функции, или знает, как это сделать?
Автор: Maks150988
Дата сообщения: 23.06.2008 20:50
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;
Автор: Mandor Sawall
Дата сообщения: 24.06.2008 08:31
Frodo_Torbins
Поиск помогает... например: http://www.swissdelphicenter.com/en/showcode.php?id=2029

Maks150988
Не обижайтесь, но у вас очень особый стиль... Почему функция, которая возвращаеть string (CheckComboNameKey), надо делать typecast к PChar, что бы присвоит на RegBufName, которая string? Почему параметру RootKey, которой string, надо делат typecast к strign? А про "Result := Result" вообще молчу.
Сможете ли дать какой-то маленкий пример, которой возможно протестировать? А то сейчас неясно что получается.
Автор: OdesitVadim
Дата сообщения: 24.06.2008 10:21
Maks150988

Цитата:
String(RootKey)

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

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

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

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


Если оптимизация включена. А если нет - можно до упора дебажить откуда лезет рэндомный мусор в программе
Автор: OdesitVadim
Дата сообщения: 24.06.2008 11:46
kkRiz

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

А что с этой строкой, что без неё - мусор будет один и тот же. Эта строка никак не влияет на функциональность программы.
Автор: Maks150988
Дата сообщения: 24.06.2008 12:04
Да пришлось с резальтами накосячить, потому что компилятор фырчит что функция якобы не будет проинициализирована. Понимаю что это борщ, однако для надежности все понасовал...
Я еще просто не оптимизировал код. Пытаюсь пока скелет работоспособный сделать.

http://webdrive.avtograd.ru//Download/Explorer/Delphi%20WinApi%20sources/Registry_AutoRun_Editor_1.0.0.0.rar

Просто пытаюсь авторан едитор натворякать опенсорсный. Просто глянул такую фичу в YourUninstaller и захотелось наподобие сделать. Только чтоб бесплатный был.
Автор: OdesitVadim
Дата сообщения: 24.06.2008 13:26
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;
Автор: Maks150988
Дата сообщения: 24.06.2008 14:09
OdesitVadim
Да я так и хотел сделать. Потом не до этого было. Тем более есть еще некоторые функции, которые нужно корректно переписать. Все равно еще рановато. Один фиг кучу раз еще код можно перелопатить...

P.S. помойму даже в платных программах код поди мусорный и с неправильными конструкциями. Главное лишь бы работало...
Автор: OdesitVadim
Дата сообщения: 24.06.2008 15:16
Maks150988
А ты как думаешь, почему они исходники не открывают? Страшно показывать - заклюют.

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

И что бы добавить одну опцию в программу прийдётся перелопатить полкода...
Автор: Mandor Sawall
Дата сообщения: 24.06.2008 15:24
Maks150988
Ето правда (что в платных программах есть мусорный код и т.д.), но такой стиль вообще не говорит хорошо о вас. Таким образом вы затрудняете даже нас - тем, от которым хотите помощ.

Изпробовал код - не увидел проблема; кстати, можно вызват диалог даже если не выбран елемент из списка - тогда RegBufRoot и RegBufName не именют валидные стойности.
CheckComboRootKey() возвращает Longint, а должен возвращать HKEY (или LongWord, или DWORD, но никак не знаковой тип).

Кстати, если изпользувать локалная переменная для цикл, генерится более ефективной код, чем при изпользувание глобальной такой. И компилятор не ругается...

Добавлено:

Кажется, понял... Наверное, проблем в том, что RegBufRoot и RegBufName получают стойности на WM_INITDIALOG, а използуются при WM_COMMAND, а они локалные. Ето два разные вызова, поетому стойности не сохраняются. Сделайте RegBufRoot и RegBufName глобальные.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Глобальные переменные в разных формах с++ builder 'a.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.