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

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

Автор: Frodo_Torbins
Дата сообщения: 03.03.2009 15:38
V1s1ter

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

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

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

Тогда конфигурацию надо хранить в бинарном файле, еще и заархивировать его можно. Ini-файл как раз для того и сделан, чтобы его легко мог редактировать человек.
Автор: delover
Дата сообщения: 03.03.2009 19:19
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);
...
Автор: DokPZ
Дата сообщения: 03.03.2009 21:39
Господа, подскажите как можно сравнить содержимое двух BitMap-ов? Сравнивать каждый пиксель - неэффективно, слишком загружает процессор.
Или подскажите, если кто знает более эффективный алгоритм распознования цифр на картинке.
Автор: Kiberpsih
Дата сообщения: 04.03.2009 00:54
В общем пытаюсь приконнектится к ресурсу IPC$ на удаленной машине используя WNetAddConnection2 следующим образом

[more]
Код:

FNetRes.dwType := RESOURCETYPE_ANY;
FNetRes.lpLocalName := nil;
FNetRes.lpRemoteName := PWideChar(FPath);\\имя_машин\IPC$
FNetRes.lpProvider := nil;

dwStatus := WNetAddConnection2(FNetRes, FPassword, FUserName, 0);

Нужно мне это для полноценного доступа к сервисам и реестру удаленной машины.
Собственно не очень понятно, почему функция возвращает 0 даже в том случае, если логин и пароль заведомо не верны? Как правильно авторизоваться на удаленной машине зная админский логин/пароль?
[/more]
Автор: Tantos
Дата сообщения: 04.03.2009 02:57
DokPZ

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

Нейронные сети.
Автор: V1s1ter
Дата сообщения: 04.03.2009 03:20
tatuich

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

А вдруг кто то exe-файл отредактирует ?
Вы не пробывали подправить ini файлы сложных програм, а еще лучше реестр Windows с целью проверки отказоустойчивости ?
Я не буду флеймить о защищеном коде, но поверте ВСЕ проверки должны быть сбалансированными. Излишее желание написать правильный код часто приводит к обратному. Ну, а что лишнее, а что нет, это дело субъективное.
Извините если, что, я просто пытаюсь сэкономить Вам время.
Автор: dardreams
Дата сообщения: 04.03.2009 08:09
Добрый день!
......................
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;
...........................
как сделать так чтобы все эти лэйблы уничтожались каждый раз в начале кода ?
Тоесть уничтожились и заново создались, потом снова уничтожились и так по циклу.
Автор: shulum
Дата сообщения: 04.03.2009 09:46
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
Автор: dardreams
Дата сообщения: 04.03.2009 10:44
shulum
Это точно код для Дельфи ?
Автор: f3ka
Дата сообщения: 04.03.2009 11:06
dardreams то есть вы не видите сходства с вашим кодом?
конечно же это код на делфи...
Автор: greenpc
Дата сообщения: 04.03.2009 11:34
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
Автор: delover
Дата сообщения: 04.03.2009 11:46

Цитата:
Как скроллировать картинку? У меня 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;
Автор: diodio
Дата сообщения: 04.03.2009 18:51
Не совсем по теме, но...
Подскажите, пожалуйста шустрый алгоритм для задачи:
есть таблица, смотреть поле, если запись в поле еще не встречалась то :функция, если нет - смотреть дальше.
А то я делаю так - смотрю поле - сравниваю с темп. базой - если не было записываю в темп. базу и функция, если было - то дальше, в конце очистка темпа.
Что-то мне подсказывает, что можно и без такого гемороя
Заранее спасибо.
Автор: lerthe61
Дата сообщения: 04.03.2009 19:20
diodio
Что из себя таблица представляет?
Можно отсортировать данные в таблице и запускать функцию, если предыдущий элемент <> текущему.
Если нельзя менять значения в таблице (порядок записей), то можно создать индекс (порядок записи в отсортированном наборе, текущий индекс записи). Отсортировать по порядку записи в отсортированном наборе и опять применим предложенный мною алгоритм.
Автор: afiget
Дата сообщения: 04.03.2009 22:05
diodio
что за таблица, что за база?
Автор: greenpc
Дата сообщения: 05.03.2009 14:45
diodio
в dataset sql 'select * from <Table> where <поле> is null'
и дальше по всему DS - функция
Автор: asimpsons
Дата сообщения: 05.03.2009 15:51
Всем привет, форумчани помогите решит проблему.
Есть PageControl, он имеет 10 TabSheet’ов. В каждом TabSheet’е есть кнопка. Она для активации следующего TabSheet’а. Не могу нарисовать код для исключение переключении нажатием на заголовок TabSheet’а пользователем, чтоб нажимал только кнопку.
Сам пытаюсь таким образом-
В событие OnChanging рисую код:
if state=false then
raise exception.Create('Нажмите кнопку’);

Когда нажимается кнопка:
state:=true;
PageControl1.ActivePageIndex:=StrToInt(a)-1;
state:=false;

не работает!
Автор: afiget
Дата сообщения: 05.03.2009 17:28
greenpc
По условию задачи без подзапроса (как минимум, зависит от СУБД) не обойтись.
Автор: asimpsons
Дата сообщения: 06.03.2009 05:27
Вчера лёг спать и перед тем как уснуть, все-таки додумался! ))))))))
k – глобальная переменная

Код:
procedure TfmMain.xpPageControl1Changing(Sender: TObject;
var AllowChange: Boolean);
begin
if state=false then
k:=xpPageControl1.ActivePageIndex;
end;
Автор: delover
Дата сообщения: 06.03.2009 07:14
asimpsons
Так Вам не запретить. Событие является только уведомлением о происходящем в сердцевине Виндового апи.

Но по идее совершенно не верно то что Вы хотите. Чтобы пользователь видел на экране графические элементы управления и чтобы они не работали. Зачем они тогда Вам?
Я бы их просто убрал.

Код:
PageControl1.Style := tsButtons;
PageControl1.TabStop := False;
TabSheet1.TabVisible := False;
TabSheet2.TabVisible := False;
TabSheet3.TabVisible := False;
...
Автор: asimpsons
Дата сообщения: 06.03.2009 12:57
delover
Все компоненты создаются динамически и процедура одна для всех кнопок. Кроме PageControl создаются WebBrowser(10) и RadioGroup(10). Поэтому мне нужна была универсальная процедура (тестирующая программа). А PageControl нужна для просмотра своих ошибок пользователем, после окончании теста. Вообще, в моем предыдущем посте я описал, как проблему решил, все работает. Спасибо
Автор: DmitryKz
Дата сообщения: 07.03.2009 23:19
Ребята, что за глюк (или не глюк, фиг знает) может быть - в Дельфи 2009 не вижу компонента TCheckListBox. Поиск среди компонентов ничего не дает, в справке про него тоже ничего не написано. Ну вот, TScrollBox, за ним должен быть TCheckListBox, но его нет, идет Сплиттер. Блин, я в шоке... Или я чего-то не знаю? С 2009 еще не работал, только решил пересесть.

Добавлено:
Блин, ну и засада - щас запустил копию Дельфи 2009 ранее установленную на Виртуалке - там этот компонент находится на положенном месте!!!
Вопрос - можно ли как-то вылечить сие отсутствие родного компонента без переустановки студии? И вообще, как такое может быть???



Добавлено:
Единственное предположение, что кто-то из установленных сторонних компонентов так "постарался". Такое может быть?

Добавлено:
Кажется, нашел "предателя" - TMS Unicode Component Pack 1.7.0.2 - последняя версия, которую разрабы рекомендуют для постепенного переноса ранее написанных проектов на 2009 - TCheckListBox сначала обнаружился на их вкладке Additional, а после удаления пака вернулся на свое законное место.
Автор: lorents
Дата сообщения: 08.03.2009 16:08
как сделать функцию печать нескольких картинок, но чтобы через диалоговое окно печати?

Добавлено:
а лучше если у кого портативная программа для просмотра картинок?
спасибо
Автор: Frodo_Torbins
Дата сообщения: 08.03.2009 17:36
lorents

Цитата:
а лучше если у кого портативная программа для просмотра картинок?

Недавно накропал такое: http://narod.ru/disk/6428487000/ImageViewer.exe.html
Автор: lorents
Дата сообщения: 08.03.2009 17:46
Frodo_Torbins
но в проге ничего нет, абсолютно ничего, может я что-то перепутал?
Автор: Frodo_Torbins
Дата сообщения: 08.03.2009 18:18
lorents
Во-первых там есть попап меню А во-вторых печатать она действительно не умеет, я для этого в висте пользуюсь стандартными средствами.
Автор: lorents
Дата сообщения: 08.03.2009 18:22
Frodo_Torbins

Цитата:
я для этого в висте пользуюсь стандартными средствами.

мастер печати фотографий? я хотел ее в использовать ее в своей проге но она поддерживается тока в висте и хр
Автор: Frodo_Torbins
Дата сообщения: 08.03.2009 20:22
lorents
Ну тогда остается или torry.net, или руками рисовать на канве принтера.
Автор: lorents
Дата сообщения: 08.03.2009 20:26
Frodo_Torbins

Цитата:
у тогда остается или torry.net

объясни плиз что это такое?
Автор: Frodo_Torbins
Дата сообщения: 08.03.2009 20:36
lorents
Это самый большой в инете сборник компонент для делфи. Заходиш в раздел "VCL->Print VCL" и ищеш чего там тебе надо. Если с английским проблемы, то можно у гугла помощи попросить.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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