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

» Вопросы по Delphi

Автор: deks
Дата сообщения: 19.07.2005 16:47
Softerr

Читай справку про TTable.CachedUpdates (TBDETable.CachedUpdates)

Все функции, необходимые для работы системы кэшируемых апдейтов, там указаны по ссылке "See also"

Добавлено:
aquaman1977

встречный вопрос6 что такое функция FillChar знаю - это из модуля System. в принципе, она написана на ASM и должна быть достаточно быстрой.

А что такое ZeroMemory? IMHO эта функция должна просто вызывать FillChar...
Автор: Softerr
Дата сообщения: 19.07.2005 17:40
deks, спасибо!
Автор: ShIvADeSt
Дата сообщения: 20.07.2005 01:02
deks

Цитата:
встречный вопрос6 что такое функция FillChar знаю - это из модуля System. в принципе, она написана на ASM и должна быть достаточно быстрой.
А что такое ZeroMemory? IMHO эта функция должна просто вызывать FillChar...

Я обычно в таких случаях просто смотрю как она реализована в сорсах, вот

Цитата:

procedure ZeroMemory(Mem:Pointer;size:integer);
var
i:integer;
begin
for i := 0 to Size-1 do PChar(Mem)[i]:=#0;
end;

FillChar да написана на асме.
Автор: mr_eoi
Дата сообщения: 20.07.2005 06:42
MICROPOM
09:00 19-07-2005
Цитата:
Вроде работает, только процесс не завершается.
Продолжает просить: пресс эникей ту континиори.

Странно - у меня даже досовские .BAT файлы со всякими pause тушит (из-под любых виндов).
Автор: aquaman1977
Дата сообщения: 20.07.2005 09:46
deks

Спасибо. Разобрался!
Гмм, мог бы и сам в сырцах глянуть - не догадался!
Тогда еще один вопрос:
Допустим есть два массива ar1 и ar2 с одинаковой размерностью [0..m, 0..n]
Как оптимальнее всего присвоить значения элементов массива ar2 - элементам массива ar1. На данный момент у меня это реализовано во вложенных циклах по m и n соответственно, вида:

for i:=0 to m do
for j:=0 to n do ar1[m,n]:=ar2[m,n]

Может быть это было бы эффективнее реализовать операциями с памятью?
Автор: OdesitVadim
Дата сообщения: 20.07.2005 10:07
aquaman1977
Через копирование памяти
CopyMem(<указатель на источник>,<указатель на приёмник>,<сколько байтиков>)
для масивов указателем будет имя масива, размер - m*n*sizeof(базовый тип)
Автор: help777
Дата сообщения: 21.07.2005 15:51
подскажите как реализовать парсинг структурированного текстового файла с занесением данных в бд? пример:

Код:
BC2;ИНН;;;300100102861
BC3;НОМЕР ЗАЯВКИ;;;89
O2;ДИСТРИБУТОР;;;Иванов И.И.
O3;ГРУЗОПОЛУЧАТЕЛЬ;;;тот же
O4;АДРЕС ДОСТАВКИ;;;Москва
O6;ДАТА ОТГРУЗКИ;;;07.06.2005
O7;ДАТА ДОСТАВКИ;;;07.06.2005
O8;ВРЕМЯ ДОСТАВКИ;;;01:20
O9;ЗАКАЗ СОСТАВИЛ;;;Сидоров А.А.
O10;ДАТА СОЗДАНИЯ ЗАКАЗА;;;01.07.2005 15:44:06
;товар 1;код1;код2;"400"
;товар 2;код1;код1;"360"
;товар1;12312;12312;"275"
Автор: vserd
Дата сообщения: 21.07.2005 17:57
help777
Построчно, нашел первое Ox или BCx, значит это шапка накладной, записываем во временный буфер-лога по этой накладной, делаем анализ к какому полю строку отнести и заеносим данные структуры, продолжаем дальше для всех строк не начинающихся с ;
Как только нашли строку с ; нужно проверить полноту данных из шапки наладной. Если не полностью, скидываем эту инфу в лог проблем для ручного разруливания, тудаже скидываем все записи с ; до следующей строки (по желанию можешь проконтролировать тело накладной).
Если все нормально, тогда обрабатываешь тело накладной. Если есть проблемы запись в лог проблем (в БД не пишешь ничего).
Если все в порядке запись в базу.
Повторяешь для всех строк в файле.

По финишу автоматического добавления если есть проблемы, показываешь пользователю диалог в котором даешь ему инфу чего тебе не понравилось в этой накладной (накладную давай полностью). После коррекции пишешь в базу. В базе в обязательном порядке веди лог этих проблемных накладных, для разруливания проблем типа "а я ничего не делал(-а)"
Автор: help777
Дата сообщения: 21.07.2005 18:23
vserd
большое тебе спасибо за алгоритм , осталось лишь мне его реализовать. Может быть есть у кого подобные решения по парсингу, хотелось бы посмотреть - это бы мне очень сильно помогло. Спасибо.

Автор: Z MeZe
Дата сообщения: 21.07.2005 22:36
help777

Цитата:
подскажите как реализовать парсинг структурированного текстового файла с занесением данных в бд? пример:

Можно попробовать "поиграться" с Q_String (поищи модуль .pas в инете, если нет - пиши, пошлю). Там много всего. Ну и с StringList. Что-то типа:
var
MyList: TStringList;
...
MyList:=TStringList.Create;
StrBuf:= {твоя строка "пропаренная" QString-ом /убрать лишние ';', пробелы и т.д.}
...
MyList.Text:=StringReplace(StrBuf,';',#13#10,[rfReplaceAll]); (если разделитель строго ';')
...
MyList.Strings[1], MyList.Strings[2]... MyList.Strings[...]
...
MyList.Free;
---
Можно много чего сделать полезного (если я правильно понял задачу)
Автор: zenix
Дата сообщения: 22.07.2005 10:42
Подскажите, где взять документацию на русском по Wise Installer?
Автор: ShIvADeSt
Дата сообщения: 25.07.2005 00:43
zenix

Цитата:
Подскажите, где взять документацию на русском по Wise Installer?

А при чем здесь вопросы по Делфи? Есть отдельный топик по инсталляторам, там и спроси.
Автор: dDE
Дата сообщения: 25.07.2005 09:40
Здравствуйте! У меня небольшая проблема с потоками/XMLDocument'ом. Есть проект, если в модуле главной формы динамически создавать XMLDocument, то он работает абсолютно нормально, но если создавать XMLDocument в потоке, то выдаётся следующее сообщение:

"Project Project1.exe raised exception class DOMException with message 'Microsoft
MSXML is not installed'."


Код:
unit XMLThread;

interface

uses
XMLDoc, xmldom, XMLIntf, msxmldom;

type
TXMLThread = class(TThread)
public
URL: String;
protected
procedure Execute; override;
end;

implementation

procedure XMLThread.Execute;
var XML: TXMLDocument;
begin
XML := TXMLDocument.Create(Self.URL);
XML.Active := True;
end;

end.
Автор: vserd
Дата сообщения: 25.07.2005 10:59
dDE
ты в потоке выполняешь инициализацию COM?
CoInitialize(nil);

Автор: dDE
Дата сообщения: 25.07.2005 11:28
vserd

Тьфу ты, забыл. Спасибо
Автор: MICROPOM
Дата сообщения: 25.07.2005 13:26
mr_eoi

Цитата:
Странно - у меня даже досовские .BAT файлы со всякими pause тушит (из-под любых виндов).

Действительно странно, но всёравно неработает.
Може ещё разик свой код скинеш?
Автор: VladIs
Дата сообщения: 25.07.2005 20:41
Здравствуйте, есть два вопроса.
1. Как открыть новое окно из программы на второй монитор?
2. Есть набор файлов (html-страницы) и надо их "спрятать" в нечто, подробное архиву. (Не читаемое простыми способами, но при этом достаточно быстро работающее). Какой вариант реализации на Ваш взгляд лучше?
Автор: ShIvADeSt
Дата сообщения: 26.07.2005 00:40
VladIs

Цитата:
Есть набор файлов (html-страницы) и надо их "спрятать" в нечто, подробное архиву.

запихни все это дело в ресурс и когда надо загружай. Простыми способами читаться не будет. Если же надо чтобы и послежнее не читалось, то упакуй программу чем нить, что пока не распаковывается.

Цитата:
1. Как открыть новое окно из программы на второй монитор?

надо вначале определить, есть ли вообще второй монитор, и не запущена ли сама прога на втором мониторе, за неимением оного предлагаю определить отношение ширины экрана к высоте и если оно больше стандартных, то значит моников 2, потом смотришь позицию своей программы и оппределяешь из нее на каком из моников она запущена, а потом при запуске нового окна устанавливаешь его позицию так, чтобы оно было на другом монике.
ЗЫ мониторы могут быть расширены не только по горизонтали.
Автор: FAngel
Дата сообщения: 26.07.2005 08:10
VladIs
По второму пункту можешь воспользоватся чем нибудь типа FlexCompress
Автор: Postscriptum
Дата сообщения: 26.07.2005 13:07
Подскажите, плиз, ессть ли компоненты для Delphi, которые позволяют зарегистрировать приложение как службу в Windows NT/2000/XP, проверять, запущена ли какая-либо служба или нет, запускать и останавливать службы?
Автор: Solnake
Дата сообщения: 26.07.2005 17:20
Подскажите, как узнать какие длл-ки погружает екзешник проги, а то уже задолбался.
Пишу прогу - все работает супер, а вот с переносимостю её на другие компы - туговато.
Автор: GloThin
Дата сообщения: 26.07.2005 17:40
Solnake

Цитата:
как узнать какие длл-ки погружает екзешник проги,

Попробуй программу FILEMON с фильтром по названию программы, которую надо проверить....
Автор: OdesitVadim
Дата сообщения: 26.07.2005 18:23
Postscriptum

Цитата:
Подскажите, плиз, ессть ли компоненты для Delphi, которые позволяют зарегистрировать приложение как службу в Windows NT/2000/XP

ПРограмма должна быть написана соответствующим образом, чтобы быть сервисом. Правда есть прога (имя не помню), которая может заставить работать приложение сервисом, но только для несетевых приложений.

Цитата:
проверять, запущена ли какая-либо служба или нет, запускать и останавливать службы?

www.delphiworld.narod.ru/base/run_or_start_service.html - читаем, присвещаемся
Автор: VladIs
Дата сообщения: 26.07.2005 23:12
Спасибо за советы, но второй вопрос так и не остался до конца решенным.
Наверно я не очень хорошо сформулировал... Дело обстоит так:
Есть порядка 1000 html страниц, которые необходимо отображать в зависимости от команд пользователя. Отображение происходит в TWebBrowser и страницы взаимосвязаны.
Задача: "спрятать" страницы от любопытных глаз, при этом не потеряв возможность "на лету" переключаться между ними по гиперссылкам. Идеал - компонент, работающий с архивом как с виртуальной файловой системой.
Автор: CTOKOTOB
Дата сообщения: 27.07.2005 00:42
Совсем простой вопрос: тот факт, что в проекте типа "WinForms/Delphi.NET" не работает Forms в опциях проекта, был замечен уважаемой публикой? Это похоже на баг? Ведь во всех остальных видах проектов оно работает нормально.

Версия 2005 со всеми апдейтами...
Автор: Sexton
Дата сообщения: 28.07.2005 06:07
VladIs, попробуй Solid File System (http://www.eldos.org/) и Single File System (http://www.aidaim.com/products/sfs/sfs_spec.php). Также можно посмотреть FileStorage (www.appcontrols.com), Block File (http://www.jazarsoft.com/product.php?pid=0030040001) и Structured Storage Library (http://plasmatech.com/storage.htm).
Автор: 2Polkan
Дата сообщения: 29.07.2005 21:11
Люди, дайте ссылку на какую-нить огромную базу данных по компонентам... Например, мне нужны все свойства Memo и их описание... Чтобы были ответы вопросы типа "что делает Memo1.Lines.Self и как его использовать"...

Добавлено:
Вопрос вдогонку:

Имеется две Мемы. Одна со всякой фигней типа
123 asdasdasdasd
234 asdghgfrerdb
543 sdfdsfgdfhfghf

Вопрос: как мне перенести первые Х символов с каждой строки в Мему2, чтобы стало так: (если Х=3)

123
234
543
Автор: Sleepwalker
Дата сообщения: 29.07.2005 22:48
2Polkan
что касается стандартных компонент, то их свойства полностью расписаны в прилагаемой документации. По сторонним компонентам обычно хелп идет вместе с ними либо по имени ищи в поисковиках. Много на сорсфордже и на торри.нет

второй вопрос.
for i=0 to memo1.lines.count-1 do
memo2.lines.add(copy(memo1.lines[i],1,X))



Добавлено:
2Polkan
кстати, откуда ты взял такую формулировку по self? self на то и есть, что без всяких префиксов
Автор: moonrise
Дата сообщения: 30.07.2005 05:51
всех приветствую.

как при помощи TtcpClient проверить на анонимность список фтп?

Код: procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
Memo.Clear;
Memo1.Clear;
for I := 0 to ip_list.Lines.Count - 1 do // Iterate
begin
with TTcpClient.Create(self) do
begin
Name := 'TCP_' + IntToStr(I);
BlockMode := bmNonBlocking;
Tag := 0;
RemoteHost := ip_list.Lines[i];
RemotePort := '21';
OnReceive := TCP.OnReceive;
Active := True;
Sendln('user anonymous');
while Tag = 0 do Receiveln();
end
end; // for
end;
....
procedure TForm1.TcpReceive(Sender: TObject; Buf: PAnsiChar;
var DataLen: Integer);
var
S: Integer;
begin
Memo.Lines.Add((Sender as TTcpClient).RemoteHost + ' ' + copy(Buf,1,DataLen-2));
S := StrToInt(copy(Buf,1,3));
case S of //
220: (Sender as TTcpClient).Tag := 1;
331: begin
(Sender as TTcpClient).Sendln('pass FTP_BOT');
(Sender as TTcpClient).Receiveln();
end;
230: begin
(Sender as TTcpClient).Disconnect;
(Sender as TTcpClient).Active := False;
Memo1.Lines.Add((Sender as TTcpClient).RemoteHost +' : Anonymous')
end;
else
(Sender as TTcpClient).Disconnect;
(Sender as TTcpClient).Active := False;
Memo1.Lines.Add((Sender as TTcpClient).RemoteHost +' : Error')
end; // case
if length(Buf) > DataLen then (Sender as TTcpClient).Receiveln()
end;
Автор: Sleepwalker
Дата сообщения: 30.07.2005 08:35
а чего конкретно-то не хочет работать? кстати, процедура Tcpreceive управление получает? у меня такое ощущение, что не должна, судя по коду.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Вероятность одинакового CRC32


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