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

» Вопросы по Delphi 2

Автор: greenpc
Дата сообщения: 23.10.2006 11:18
bornbill
Procedure RunAny(CommandLine: string; Str: TStrings);
может все таки
Procedure RunAny(CommandLine: string; var Str: TStrings);
или
Procedure RunAny(CommandLine: string; var Str: TStringList);
Автор: vshersh
Дата сообщения: 23.10.2006 11:22
bornbill
Ты пишешь

Код: if StringBuf.Count > 0 then
begin
StringBuf.Strings[0] := Str.Strings[Str.Count-1]+StringBuf.Strings[0];
Str.Delete(Str.Count-1);
end;
Автор: bornbill
Дата сообщения: 23.10.2006 11:23
greenpc
То же самое, выполнение прерывается в момент вызова процедуры...... С той же ошибкой..
Заранее благодарен.

Пытаюсь склеить разорванную строку.....
Ошибка остаётся даже после закоментированности указанного кода
Автор: greenpc
Дата сообщения: 23.10.2006 11:31
bornbill
код
Procedure RunAny(CommandLine: string; var Str: TStringList);
выполняется
Автор: FRALX
Дата сообщения: 23.10.2006 11:50
bornbill
Дык если у тя str пустой то Str.Strings[Str.Count-1] именно эту ошибку и выдаст
ТЫ тада проверяй есть у тя в str ченить или нет
Автор: Sexton
Дата сообщения: 23.10.2006 13:22
OdesitVadim
Цитата:
if (str=nil) or (not Assigned(str)) then

Стало любопытно: разве эти два условия друг друга как-то дополняют, а не дублируют?
Автор: bornbill
Дата сообщения: 23.10.2006 14:36
Всем спасибо доразбился
Но естественно есть ыщо вопрос
[more=Читать]
function ExecuteFileTm(FileName: string; Params: string; Dsk: boolean; TimeOut:
cardinal): boolean;
var
Res: LongBool;
PIn: PROCESS_INFORMATION;
SII: STARTUPINFO;
RetCode: cardinal;
TmOut: cardinal; //In seconds
i: cardinal;
CreationsFlags: cardinal;
begin
TmOut := TimeOut;
try
if Dsk then
begin
CreationsFlags := CREATE_DEFAULT_ERROR_MODE or NORMAL_PRIORITY_CLASS
or CREATE_UNICODE_ENVIRONMENT;
end
else
begin
CreationsFlags := CREATE_DEFAULT_ERROR_MODE or CREATE_NO_WINDOW
or NORMAL_PRIORITY_CLASS
or CREATE_UNICODE_ENVIRONMENT;
end;
getstartupinfo(SII);
Res := createprocess(
pchar(FileName),
pchar(Params),
nil,
nil,
True,
CreationsFlags,
nil,
pchar(extractfilepath(FileName)),
SII,
PIn);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
if not Res then
begin
error:=GetLastError();
ShowMessage(InttoSTR(error));
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
i := 0;
RetCode := STILL_ACTIVE;
while (i <= TmOut) and (RetCode = STILL_ACTIVE) do
begin
try
GetExitCodeProcess(Pin.hProcess, RetCode);
except
CloseHandle(Pin.hProcess);
ExecuteFileTm := False;
exit;
end;
Sleep(1000);
inc(i);
end;
if (i > TmOut) and (RetCode = STILL_ACTIVE) then
begin
TerminateProcess(Pin.hProcess, RetCode);
CloseHandle(Pin.hProcess);
// ExecuteFilePrExt:=false;
ExecuteFileTm := false; // ION T
exit;
end;
CloseHandle(Pin.hProcess);
ExecuteFileTm := True;
end;
[/more]

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

Заранее благодарен за пинок в нужном направлениии.... и подсказку по выходу из ситуации
Автор: greenpc
Дата сообщения: 23.10.2006 14:48
bornbill
Params :=FileName + ' параметры';
пример
params :='notepad.exe 1.1';
Автор: OdesitVadim
Дата сообщения: 23.10.2006 15:16
Sexton
Дополняют
Первое проверяет, а не указывает ли указатель в nil, тоесть проверка на "несоздность".
Но можно принудительно передать какой-то левый указатель, указатель на цыфровые небеса. Так вот Assigned попытается проверить на корректность этот указатель.
Хотя вроде Assigned и делает проверку на nil, но почему-то раньше (в 3 Делфи кажеться) Assigned пучило от nil
Автор: RomanTim
Дата сообщения: 23.10.2006 16:32
OdesitVadim

Цитата:
Но можно принудительно передать какой-то левый указатель, указатель на цыфровые небеса. Так вот Assigned попытается проверить на корректность этот указатель.

Кто это тебе такое сказал? Вообще то Assigned компилируется в
cmp dword ptr [адрес параметра], 0
то есть делает ту же самую проверку на nil.
А вот в чем помогает, так это проверить присвоено ли что-то переменной процедурного типа - ее в сравнение не подставить, будет воспринято как вызов
Автор: FireZone
Дата сообщения: 23.10.2006 21:04
RomanTim
Цитата:
ее в сравнение не подставить, будет воспринято как вызов
Несмотря на то, что оператор @ извлекает адрес переменной, для переменных процедурного типа он извлекает значение. Даже в делфовом хелпе так написано. Сбивает с толку, но факт.
Автор: RomanTim
Дата сообщения: 23.10.2006 22:02
FireZone
Про собаку знаю, но ведь без нее все таки не подставить собака именно что сбивает с толку, а Assigned(ProcPtr) читается вполне однозначно
Автор: Sexton
Дата сообщения: 23.10.2006 23:30
OdesitVadim
Цитата:
Хотя вроде Assigned и делает проверку на nil, но почему-то раньше (в 3 Делфи кажеться) Assigned пучило от nil

Насчёт Дельфи 3 не знаю, а в современных версиях использую только Assigned - пока проблем не было.
Автор: HOUPE
Дата сообщения: 24.10.2006 03:59
Маленький такой, скромный такой вопросик :
В прогу загружаются таблицы с SQL сервера, таблиц примерно 4 по 10 тыс записей и выборка из таблы(млн. записей) около 15тыс записей. Прога как-то странно работает, то медленно, то быстро грузит. Почему?

P.S. С базой кроме меня пока не работает.
Автор: OdesitVadim
Дата сообщения: 24.10.2006 08:18
HOUPE
Даже если запросы возвращают одинаковое количество записей это ещё ничего не означет. Можно сделать такой запрос к серваку, что он долго в себя не будет приходить.
Так как запросы ты не приводишь - судить о их производительности сложно. А во вторых серверы могут кешировать запросы.
А в третих, ты не написал технологию доступа к данным (BDE, ADO)
Автор: oan42
Дата сообщения: 24.10.2006 09:17
HOUPE
1) Какой SQL сервер? (MS SQL Server или что другое)
2) Возможно, что локальная сеть загружена пересылкой других данных.
3) По сколько записей в пачке пересылаются данные за один round-trip?
Автор: sunduk4
Дата сообщения: 24.10.2006 09:24
Хочу обычной форме запретить терять фокус. Делаю так -


Код:
procedure TfrTrees.WndProc(var Message: TMessage);
begin
with Message do
case Msg of
WM_KILLFOCUS, WM_ACTIVATE: begin
if (Message.Msg = WM_ACTIVATE) then
if (Message.WParam = WA_INACTIVE) then exit;
if (Message.Msg = WM_KILLFOCUS) then exit;
end;
end;
inherited WndProc(Message);
end;
Автор: vshersh
Дата сообщения: 24.10.2006 09:29
sunduk4
Может тебе просто надо форме поставить

Код: FormStyle := fsStayOnTop
Автор: sunduk4
Дата сообщения: 24.10.2006 09:57
vshersh

забыл второе условие задачи написать - мне этой форме надо уметь Hide еще сказать. fsStayOnTop отпадает в таком случае..
Автор: vshersh
Дата сообщения: 24.10.2006 10:15
sunduk4

Цитата:
fsStayOnTop отпадает в таком случае..

Объясни, почему?
Автор: sunduk4
Дата сообщения: 24.10.2006 10:29
vshersh

прошу прощения, ошибся...
чем плох вариант с fsStayOnTop - доступны контролы остальных форм. Мне нужно поведение как у модальной формы, но с возможностью сделать Hide.
Автор: Andysoft3C
Дата сообщения: 24.10.2006 10:32
Привет всем
Ищу алгоритм CRC24 на Delphi, есть на С может кто поможет перевести

#define CRC24_INIT 0x00b704ceL
#define CRC24_POLY 0x01864cfbL
long crc_octets_tab (char *octets, int len)
{
long crc = CRC24_INIT;
long temp;
int arg;

while (len--)
{
temp = crc;
temp >>= 8;
temp >>= 8;
temp ^= *octets++;
arg = temp & 0x000000FF;
crc <<= 8;
crc ^= CRC24tab[arg];
}
crc &= 0x00ffffffL;
return crc;
}
Автор: vshersh
Дата сообщения: 24.10.2006 10:34
sunduk4
Ну тогда и делай ShowModal... Добавь в обработчике OnClose

Код: procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caHide;
end;
Автор: sunduk4
Дата сообщения: 24.10.2006 10:43
vshersh

мда.. про это я как-то не подумал..
спасибо. прошу прощения за глупый вопрос.
Автор: HOUPE
Дата сообщения: 24.10.2006 10:48

OdesitVadim

Запрос примерно такой:
'SELECT * FROM table1 WHERE field1 = convert(datetime,'''+date1+''',104)'+
' ORDER BY field1,field2,field3,field4,field5';

А использую я ADODataSet,
насчет кэширования пока ни чего не могу сказать - надо подумать

oan42

SQL Server 2000

P.S HELP! PLEASE!


Автор: perceptron
Дата сообщения: 24.10.2006 11:17
Люди - может кто знает как перед началом копирования данных в сетевую папку на удалённой машине в локальной сети программно указать логин пароль и опять же программно зайти на этот комп перед началом копирования и хотелось бы без создания сетевого диска как это делает например прога APBackUp (в ней задаётся отдельно Login и Pass для захода на удалённый комп). WNetAddConnection2 - подошла бы но ей надо указывать ещё и сетевой локальный диск, чего не хотелось бы.
Какие мысли есть по этому вопросу ?
Автор: greenpc
Дата сообщения: 24.10.2006 12:19
perceptron
msdn
lpLocalName -
Points to a null-terminated string that specifies the name of a local device to be redirected, such as "F:" or "LPT1". The string is treated in a case-insensitive manner. If the string is empty or lpLocalName is NULL, the function makes a connection to the network resource without redirecting a local device.

по нашему делай так
lpLocalName := nil;
и будешь обращаться \\server\shra
Автор: FireZone
Дата сообщения: 24.10.2006 14:46
Andysoft3C
Цитата:
Ищу алгоритм CRC24 на Delphi, есть на С может кто поможет перевести
Перевел. Вот что вышло:
Код: const
CRC24_INIT: Integer = $00b704ce;

function crc_octets_tab(const buf; len: Integer): LongInt;
var
b: PByte;
begin
result := CRC24_INIT;
b := @buf;
while len > 0 do begin
result := result shl 8 xor CRC24tab[(result shr 16 xor b^) and $000000FF];
Inc(b);
Dec(len)
end;
result := result and $00FFFFFF
end;
Автор: oan42
Дата сообщения: 24.10.2006 19:41
HOUPE
Попробуй выполнить свои SELECT по одному из какой-нибудь оболочки,
а не из проги.
Автор: xlebopezka
Дата сообщения: 24.10.2006 23:07
HOUPE

1. mssql кеширует запрос и при повторном таком же запросе результат получается в несколко раз быстрее.
2. Возможно сервер нагружен запросами к другим БД. На сервере другие БД есть?
3. Может причина тормозов в логике программы?

Причин может быть масса, нужно методом исключения найти основную. Попробуй, как написал oan42.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


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