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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

   

tatuich



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

Цитата:
Таким образом данный файл должен содержать только коректные значения.

Просто пишется в файл корректное значение. Но вдруг кому-нибудь взбредет в голову отредактировать ini-файл вручную, и в итоге программка вылетит. Похоже придется везде применять if...then.
 
Не знаю, может это специфика Delphi 2007, но какие-то непонятки с TRegistry у меня возникли. На Delphi 7 такой мороки вроде не было.
Допустим, если сначала использовать reg.OpenKeyReadOnly, а потом дальше по коду  reg.OpenKey и reg.WriteString, то будет выдаваться ошибка записи данных в реестр. Только потом до меня доперло, что нужно перед такими участками кода делать reg.Access:=KEY_ALL_ACCESS и reg.Access:=KEY_READ. Тогда все будет без ошибок.
 
Еще кстати понравилось интересное поведение. Если не сделать reg.CloseKey, и вызвать reg.OpenKey, то открывается подключ. Пример:
Код:
reg.OpenKey('*\shell\MyApp',True);
reg.WriteString('','Open with MyApp');
reg.OpenKey('command',True);
Здесь откроется ключ '*\shell\MyApp\command'.

Всего записей: 319 | Зарегистр. 20-11-2007 | Отправлено: 16:22 03-03-2009
Frodo_Torbins

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

Цитата:
приложение будет "вылетать" с ошибкой

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

Цитата:
Насколько я понимаю ini-файл содержит состояние програмного обеспечения, слеловательно должен создаватся автоматически. Таким образом данный файл должен содержать только коректные значения.

Тогда конфигурацию надо хранить в бинарном файле, еще и заархивировать его можно. Ini-файл как раз для того и сделан, чтобы его легко мог редактировать человек.

Всего записей: 2318 | Зарегистр. 24-05-2007 | Отправлено: 16:38 03-03-2009
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Frodo_Torbins
Только нафига нужен Виндовый ини файл, я так уловить мысль и не смог. Если спросить почему используется TIniFile а не TMemIniFile, то объяснения будут максимум - что его хендлу сообщат если ини файл меняли когда запущена прилагуха. Назовите мне прилагуху, которая на это реагирует. Максимум реагирует когда изменился windows\system.ini. Моя прилагуха кстати реагирует, когда майнформ становится активной. Тупо сравнивает дату и если поменялись настройки колоров то отрисовывает. Ну так у меня ушло три строчки кода. Теперь что такое TIniFile? Это ограниченный файл, который автоматически удалит все комментарии, который в упор не понимает синтаксиса бинарных значений в REG файлах. Который безпардонно поганит все данные, к которым никто не обращался. Нафига он нужен? И вот теперь к практике. На практике прилагуха юзает этот INI только два раза, первый раз при запуске - читает все значения и потом их юзает и при выходе, сохраняет все значения - неважно менялись они или нет. От Ини файла большего и не требуется никогда. Какие тут могут быть глюки??? :

Код:
var
  MyInt358: Integer = -1;
...
  //Start
  MyInt358 := IniFile.ReadInteger('Section', 'Value', -1);
  //Close
  IniFile.WriteInteger('Section', 'Value', MyInt358);
...

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:19 03-03-2009
DokPZ

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Господа, подскажите как можно сравнить содержимое двух BitMap-ов? Сравнивать каждый пиксель - неэффективно, слишком загружает процессор.
Или подскажите, если кто знает более эффективный алгоритм распознования цифр на картинке.

Всего записей: 22 | Зарегистр. 12-12-2007 | Отправлено: 22:39 03-03-2009 | Исправлено: DokPZ, 22:48 03-03-2009
Kiberpsih

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В общем пытаюсь приконнектится к ресурсу IPC$ на удаленной машине используя WNetAddConnection2 следующим образом
 
Подробнее...

Всего записей: 7 | Зарегистр. 22-05-2006 | Отправлено: 01:54 04-03-2009
Tantos



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

Цитата:
Или подскажите, если кто знает более эффективный алгоритм распознования цифр на картинке.

Нейронные сети.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 03:57 04-03-2009
V1s1ter



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

Цитата:
Просто пишется в файл корректное значение. Но вдруг кому-нибудь взбредет в голову отредактировать ini-файл вручную, и в итоге программка вылетит.  

А вдруг кто то exe-файл отредактирует ?
Вы не пробывали подправить ini файлы сложных програм, а еще лучше реестр Windows с целью проверки отказоустойчивости ?
Я не буду флеймить о защищеном коде, но поверте ВСЕ проверки должны быть сбалансированными. Излишее желание написать правильный код часто приводит к обратному. Ну, а что лишнее, а что нет, это дело субъективное.
Извините если, что, я просто пытаюсь сэкономить Вам время.

Всего записей: 948 | Зарегистр. 06-02-2007 | Отправлено: 04:20 04-03-2009
dardreams



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день!
......................
Procedure Ping;
var i,j,x:byte;
begin
 lbName.Items.LoadFromFile('C:\Users\DAR\AppData\Local\Temp\ping.txt');
//j:=0;
 for i:=0 to lbName.Count-1 do
 begin
  Labels[i]:=TLabel.Create(self);
  Labels[i].Parent:=Self;
  Labels[i].Transparent:=true;
  Labels[i].Tag:=1;
  Labels[i].Top:=j;
  if Copy(lbName.Items[i],pos('=',lbName.Items[i])+1,length(lbName.Items[i]))<>'-1' then Labels[i].Font.Color:=$0000F0F0 else Labels[i].Font.Color:=clGray;
  Labels[i].Caption:=Copy(lbName.Items[i],1,pos('=',lbName.Items[i])-1);
  j:=Labels[i].Height+J-5;
 end;
 end;
...........................
как сделать так чтобы все эти лэйблы уничтожались каждый раз в начале кода ?
Тоесть уничтожились и заново создались, потом снова уничтожились и так по циклу.

Всего записей: 100 | Зарегистр. 29-05-2007 | Отправлено: 09:09 04-03-2009
shulum



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dardreams
 
добавить в Ваш код, например:  Labels[i].name:='label_'+inttostr(i);
 
уничтожаем так:
 
for i:=lbName.Count-1 downto 0 do
begin
 
if self.findcomponent('label_'+inttostr(i))<>nil then self.findcomponent('label_'+inttostr(i)).free;
 
end;
 
P.S. писал на память - без Delphi

Всего записей: 121 | Зарегистр. 11-06-2006 | Отправлено: 10:46 04-03-2009 | Исправлено: shulum, 10:48 04-03-2009
dardreams



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
shulum
Это точно код для Дельфи ?

Всего записей: 100 | Зарегистр. 29-05-2007 | Отправлено: 11:44 04-03-2009
f3ka

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dardreams то есть вы не видите сходства с вашим кодом?
конечно же это код на делфи...

Всего записей: 497 | Зарегистр. 02-03-2007 | Отправлено: 12:06 04-03-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tatuich
 
Цитата:
хотя логичнее было бы, если бы присвоилось значение либо 0 либо 3

так Вы пожалуйста определитесь, что хотите.
Вот Вам решение, если очень хотите защиту от дурака

Код:
try
  RadioGroup.ItemIndex := ini.ReadInteger('SampleSection', 'SampleValue', 0);  
except
      on e: Exception do RadioGroup.ItemIndex :=0;
или
      on e: Exception do RadioGroup.ItemIndex :=RadioGroup.Items.Count-1;
end;  // try/except
 
 
ЗЫ: а "дураки" у нас изобретательные и полностью поддерживаю V1s1ter
 

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 12:34 04-03-2009
delover

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

Цитата:
Как скроллировать картинку? У меня Image1.AutoSize=True и лежит она на ScrollBox1. Курсор я задал crHandPoint. При нажатии и перетаскивании я делаю:

Теперь научился. Не надо использовать функцию ScrollBy. Будет работать криво.
А надо так:

Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if not actFitImage.Checked then Exit;
  if ssLeft in Shift then
  with ScrollBox1 do begin
    HorzScrollBar.Position := HorzScrollBar.Position - X + FDragPoint.X;
    VertScrollBar.Position := VertScrollBar.Position - Y + FDragPoint.Y;
  end;
end;

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:46 04-03-2009
diodio



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не совсем по теме, но...
Подскажите, пожалуйста шустрый алгоритм для задачи:
есть таблица, смотреть поле, если запись в поле еще не встречалась то :функция, если нет - смотреть дальше.
А то я делаю так - смотрю поле - сравниваю с темп. базой - если не было записываю в темп. базу и функция, если было - то дальше, в конце очистка темпа.
Что-то мне подсказывает, что можно и без такого гемороя
Заранее спасибо.

Всего записей: 111 | Зарегистр. 26-12-2006 | Отправлено: 19:51 04-03-2009
lerthe61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
Что из себя таблица представляет?
Можно отсортировать данные в таблице и запускать функцию, если предыдущий элемент <> текущему.
Если нельзя менять значения в таблице (порядок записей), то можно создать индекс (порядок записи в отсортированном наборе, текущий индекс записи). Отсортировать по порядку записи в отсортированном наборе и опять применим предложенный мною алгоритм.

Всего записей: 74 | Зарегистр. 04-05-2007 | Отправлено: 20:20 04-03-2009 | Исправлено: lerthe61, 20:23 04-03-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
что за таблица, что за база?

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 23:05 04-03-2009
greenpc

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diodio
в dataset sql 'select * from <Table> where <поле> is null'
и дальше по всему DS - функция

Всего записей: 401 | Зарегистр. 18-04-2003 | Отправлено: 15:45 05-03-2009
asimpsons

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет, форумчани помогите решит проблему.
Есть PageControl, он имеет 10 TabSheet’ов. В каждом TabSheet’е есть кнопка. Она для активации следующего TabSheet’а. Не могу нарисовать код для исключение переключении нажатием на заголовок TabSheet’а пользователем, чтоб нажимал только кнопку.  
Сам пытаюсь таким образом-
В событие OnChanging рисую код:
if state=false then
 raise exception.Create('Нажмите кнопку’);
 
Когда нажимается кнопка:
state:=true;
PageControl1.ActivePageIndex:=StrToInt(a)-1;
state:=false;
 
не работает!

Всего записей: 15 | Зарегистр. 08-07-2008 | Отправлено: 16:51 05-03-2009
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
greenpc
По условию задачи без подзапроса (как минимум, зависит от СУБД) не обойтись.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 18:28 05-03-2009
asimpsons

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вчера лёг спать и перед тем как уснуть, все-таки додумался! ))))))))
k – глобальная переменная

Код:
 
procedure TfmMain.xpPageControl1Changing(Sender: TObject;
  var AllowChange: Boolean);
begin
if state=false then
   k:=xpPageControl1.ActivePageIndex;
end;
 


Код:
 
procedure TfmMain.xpPageControl1Change(Sender: TObject);
begin
 if state=false then
   xpPageControl1.ActivePageIndex:=k;
end;
 

Всего записей: 15 | Зарегистр. 08-07-2008 | Отправлено: 06:27 06-03-2009
   

Страницы: 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