Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C++ Builder / Delphi

Выпуск № 310
от 28.03.2004, 03:40

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 1444
Отправлено ответов: 3240
Активность: 224.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Boriss
Статус: Профессиональный
Общий рейтинг: 155.35
URL: Программирование на Паскале
[Подробней >>]
sir henry
Статус: Профессиональный
Общий рейтинг: 158.99
[Подробней >>]
Pawel
Статус: Профессиональный
Общий рейтинг: 157.89
[Подробней >>]
 
THE_PRO
Статус: Профессиональный
Общий рейтинг: 137.54
URL: THE_PRO
Телефон: (994 +12) 989647
[Подробней >>]
CJ
Статус: Опытный
Общий рейтинг: 123.82
URL: Мой персональный сайт! Зайдите и не пожалеете!
Телефон: +3757353706
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1433. Здравствуйте, господа эксперты! Please, HELP me! Срочно нужно разобраться с одной задачей. Мне нужно... (ответов: 1)
Вопрос № 1434. Доброго времени суток ! Я пишу программу тов-мат учета (Д7 FB IB&Linux). При оформлении накладной вы... (ответов: 1)
Вопрос № 1435. Вопрос насчет БЛОКИРОВОК в IB : как более оптимально осуществлять блокировку в таблицах. Пробовал в ... (ответов: 1)
Вопрос № 1436. Спасибо sir henry, но возник еще одын вопрос, вытекший из вопроса №1434 : как сделать так, чтобы в п... (ответов: 1)
Вопрос № 1437. Я благодарю Sir Henry за ответы и терпение, в действительности, я немного неправильно сформулировал ... (ответов: 1)
Вопрос № 1438. Здраствуйте. Мне нужно загрузить gif рисунок, как можно это сделать(может нужен какой либо компонент... (ответов: 5)

Вопросов: 6, ответов: 10


 Вопрос № 1433

Здравствуйте, господа эксперты!
Please, HELP me!
Срочно нужно разобраться с одной задачей. Мне нужно запустить ЕХЕ-фаил из своей многопоточной программы (то есть, чтобы они обе работали нормально, обрабатывали данные, ...). Первая должна подождать завершения второй и вернуть код выхода второй приложении (мне очень нужно знать, как оно завершилось).
И вот что здесь не работает: в процедуре ThreadFunc si, pi, pi.hProcess, pi.hThread не принимают почему-то никакого значения. Ни одна из GetExitCode (Process, Thread) ничего не возвращают.
Помогите, пожалуйста, разобраться, очень нужно. Заранее благодарю.
procedure TForm1.CreateThreadButtonClick(Sender: TObject);
var dwThreadId,dwThrdParam:DWORD;
Thread:cardinal;
Exit_Code_Thread:cardinal;
si:^STARTUPINFO;
pi:^PROCESS_INFORMATION;
Exit_code:cardinal;
Procedure ThreadFunc;
label Error_CreateProcess;
begin
si:=AllocMem(sizeof(STARTUPINFO));
si.cb:=sizeof({STARTUPINFO}si);
pi:=AllocMem(sizeof(PROCESS_INFORMATION));
if not CreateProcess(nil,'D:My projectsSchedullerMain programm-2ProceduresParams.exe /all ofDeathMetal',
nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, si^, pi^)
then begin
label3.caption:='Error - File not started.';
goto Error_CreateProcess;
end;
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,Exit_code);
//PostMessage(form1.Handle,Wm_Finished,0,0);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
label3.caption:=inttostr(Exit_code);
GetExitCodeThread(Thread,Exit_Code_Thread);
EndThread(Thread);
label3.caption:=inttostr(Exit_Code_Thread);
Error_CreateProcess:
end;
begin
Thread:=BeginThread(
nil, // default security attributes
0, // use default stack size
@ThreadFunc, // thread function
nil, // argument to thread function
0, // use default creation flags
dwThreadId); // returns the thread identifier
if (Thread=NULL) then
begin
MessageDlg('Error - no another Thread',mtError,mbOKCancel,0);
end
else begin
//
end;
end;
==================================================
А вот это процедура работает нормально, возвращает все как положено. Но оно не гадиться, блокирует приложение (ждет выхода из второй)
procedure TForm1.CreateProcessButtonClick(Sender: TObject);
label Error_CreateProcess;
var si:^STARTUPINFO;
pi:^PROCESS_INFORMATION;
Exit_code:cardinal;
begin
si:=AllocMem(sizeof(STARTUPINFO));
si.cb:=sizeof({STARTUPINFO}si);
pi:=AllocMem(sizeof(PROCESS_INFORMATION));
if not CreateProcess(nil,'D:My projectsSchedullerMain programm-2ProceduresParams.exe /all ofDeathMetal',
nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, si^, pi^)
then begin
label1.caption:='Error - File not started.';
goto Error_CreateProcess;
end;
WaitForSingleObject(pi.hProcess,INFINITE);
GetExitCodeProcess(pi.hProcess,Exit_code);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
label1.caption:=inttostr(Exit_code);
Error_CreateProcess:
end;
==================================================
На всякий случай оставляю email: dyma@newmail.ru



Вопрос отправлен: 23.03.2004, 10:46
Отправитель: Dyma (dyma@newmail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Приветствую Вас, Dyma!
По 2-му - Вы же сами написали "ждать бесконечно": WaitForSingleObject(pi.hProcess,INFINITE);
Задайте время и закройте. Не обязательно ждать завершения, если Вы не хотите, чтоб та программа блокировала Вашу. Просто перед завершении она может послать сообщение первой с помощью SendMessage (PostMessage) WM_USER+число.
Когда получите сообщение - читайте, что надо
По 1-му: УРА! впервые вижу живые метки в Delphi!!
Не тестировал, но возможно, причина в том, что, запуская в дочерном потоке, указали bInheritHandles = FALSE? Но мне кажется, что поступая так, как выше - Вы решите проблему

Ответ отправлен: 25.03.2004, 15:24
Отправитель: Boriss


 Вопрос № 1434

Доброго времени суток !
Я пишу программу тов-мат учета (Д7 FB IB&Linux). При оформлении накладной выпадает список категорий документа, где в каждой записи прошита формула вычисления проводок типа : (поле9-поле1)*10-поле12. На FoxPro 6.0 все работает без сучка, но как реализовать этот метод в дельфях под IB ума не приложу.
Можно, конечно написать навороченный интерпретатор формул,
но желательно какое-нибудь изящное решение.
Ваше мнение, господа ?



Вопрос отправлен: 23.03.2004, 12:57
Отправитель: jiny (zhas-trz@tarazinfo.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Приветствую Вас, jiny!
Есть для этого волшебное средство - называется ЗАПРС (SELECT). Вот как это будет выглядеть:
SELECT (поле9-поле1)*10-поле12 AS название FROM таблица
Если я правильно понял вопрос :).
А как у Вас на FoxPro работало? Наверняка в Дельфи можно сделать так-же.

Ответ отправлен: 23.03.2004, 13:35
Отправитель: sir henry


 Вопрос № 1435

Вопрос насчет БЛОКИРОВОК в IB :
как более оптимально осуществлять блокировку в таблицах.
Пробовал в таблицах добавлять поля UserLock, UserLockTime,
но, как обычно, местные юзеры умудрились попасть в шанс 1 из 100 и одновременно отрыли для апдейт метода одну и ту же запись. Как это осуществляется на уровне компоненты IbTransaction(какие параметры выставлять) ?
в params у меня сейчас стоит :
read_commited
rec_version
write
nowait



Вопрос отправлен: 23.03.2004, 13:05
Отправитель: jiny (zhas-trz@tarazinfo.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Здравствуйте, jiny!
Попробуйте, прежде чем давать доступ для апдейта, проверять TIBTransaction.InTransaction. Если True, значит транзакция незакончена (например, происходит изменение записи).

Ответ отправлен: 23.03.2004, 13:47
Отправитель: sir henry


 Вопрос № 1436

Спасибо sir henry, но возник еще одын вопрос, вытекший из
вопроса №1434 : как сделать так, чтобы в поле было имя формы, следующ. - имя компоненты и как программно туды получить контрол ?



Вопрос отправлен: 23.03.2004, 14:18
Отправитель: jiny

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Доброе время суток, jiny!
Хм.Отвечаю, хотя не уверен, что правильно понял :).
У компонента, с помощью которого посылается запрос на IB-сервер (TIBQuery) есть свойство для заталкивания параметров в запрос (TIBQuery.Params[Index] - массив параметров для запроса). Параметры в запросе используются так:
:Имя_параметра (т.е. с двоеточием в начале).
Во время работы программы значения в параметры запроса заносятся так:
TIBQuery.Params[1].AsString:=строковая_переменная;
или
TIBQuery.ParamByName('Имя_параметра').AsString:=строковая_переменная;
Перед тем, как заносить значения в параметры, запрос нужно закрыть:
TIBQuery.Close;
после присвоения значений параметрам заново открыть:
TIBQuery.Open;

Ответ отправлен: 23.03.2004, 15:54
Отправитель: sir henry


 Вопрос № 1437

Я благодарю Sir Henry за ответы и терпение,
в действительности, я немного неправильно сформулировал свой вопрос
насчет формул в полях таблицы типа (поле1-поле2)*поле6,
вот как обстоит ситуация на самом деле :
Накладная состоит из 2-х таблиц : 1-я(А) это шапка накладной, где указаны
данные документа(проводки, клиент, дата и прочее), 2-я таблица(Б) -
это список товаров к накладной.
Так вот, при создании накладной, схема следующая :
1) выбираются : клиент, дата, КАТЕГОРИЯ документа(где указаны проводки
с формулами, по которым расчитывать проводку) и проч., все загоняется
во временную форму.
2) временно создается таблица для списка, причем она является полной
копией таблицы "Б", так вот после закрытия наборной формы, должны
пересчитать проводки, исходя из суммы, вот конкретный пример, того
что должно получится :
- формула 1-ой проводки sum_sd-ndc-sum_skd(это поля таблицы "А")
- запись в таблице "А" еще не добавлена(все в памяти)
- есть клон таблицы "Б" где есть данные списка, но чтобы получить
такие же поля как и в табл."А" нужно что-то типа
select sum(kol*cost_sd) as sum_sd and etc. а куда здесь "впихнуть"
формулу указанную выше ?!!! И как моно сделать иначе ?
Тем более что, если я попробую как-то использовать sum_sd, то мне
вежливо дадут понять "анноун колумн")
Надеюсь на вашу профессиональность.



Вопрос отправлен: 23.03.2004, 19:59
Отправитель: Jiny (zhas-trz@tarainfo.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает sir henry

Добрый день, Jiny!
Честно признаюсь - запутался окончательно. Видно бухгалтерия не мой профиль :)).
Попробуйте составить выборку из двух таблиц (А и Б), составив правильное условие выборки, что-то типа:
SELECT (поля, которые нужны в результате, в том числе вычисляемые. В зависимости от того, в какой таблице находится поле, перед ним ставится навзвание таблицы с точкой) FROM А, Б
WHERE А.дата = нужная_дата AND
А.клиент = нужный_клиент AND
Б.товар = нужный_товар
-------------------------------
Я полагаю, что должна быть какая-то оперативная таблица, куда заносятся данные текущей сделки с клиентом: код клиента, код товара, его количество, дата сделки и т.п. текущая информация, которая полностью описывает сделку.
Было бы разумно расчет проводить именно по полям такой оперативной таблицы.
-------------------------------
Можно попробовать создать таблицу-справочник, где в колонке с типом CHAR содержаться строки запроса. По результатом проверки того или иного условия строка запроса переноситься в компонент запроса (TIBQuery) и выполняется.
Не думаю, что формул с расчетом проводок у Вас бесконечное количество :)).

Ответ отправлен: 24.03.2004, 13:00
Отправитель: sir henry


 Вопрос № 1438

Здраствуйте.
Мне нужно загрузить gif рисунок, как можно это сделать(может нужен какой либо компонент например image)?
(Delphi6)



Вопрос отправлен: 24.03.2004, 18:41
Отправитель: Том

[Следующий вопрос >>] [Список вопросов]

Отвечает Pawel

Добрый день, Том!
Поищите в интернете, там их много.

Ответ отправлен: 24.03.2004, 22:40
Отправитель: Pawel


Отвечает Boriss

Доброе время суток, Том!
Для использования анимированных GIF можно оспользоваться
компонентом RxGifAnimator, входящим в комплект RxLib.
Кое-что есть на http://www.lawrenz.com/coolform/download.htm
Еще
http://www.torry.net/quicksearchd.php?SID=7382478ad9f67dba5c17f26087de663a&String=gif&Title=Yes

Ответ отправлен: 25.03.2004, 16:16
Отправитель: Boriss


Отвечает THE_PRO

Здравствуйте, Том!
Nujni isxodniki

Ответ отправлен: 25.03.2004, 15:07
Отправитель: THE_PRO


Отвечает CJ

Добрый день, Том!
Да, для этого нужен компонет поддерживающий gif.

Ответ отправлен: 24.03.2004, 22:21
Отправитель: CJ


Отвечает sir henry

Приветствую Вас, Том!
Вот адрес, по которому можно скачать компоненту для загрузки разных форматов, в том числе и gif:
http://www.delphimaster.ru/cgi-bin/download.pl?get=1053598165&n=1
Зайдите еще на www.torry.net, там тоже много интересного.

Ответ отправлен: 25.03.2004, 09:48
Отправитель: sir henry



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (25)
C / C++ (16)
Perl (4)
Builder / Delphi (19)
Pascal (22)
Basic / VBA (5)
Java / JavaScript (6)
PHP (13)
Криптография (6)
WinAPI (14)
Радиоэлектроника (10)
Пользователю
Windows 95/98/Me (41)
Windows NT/2000/XP (52)
"Железо" (31)
Поиск информации (20)
Администратору
Windows NT/2000/XP (27)
Linux / Unix (12)
Юристу
Гражданское право (12)
Семейное право (11)
Трудовое право (12)
КоАП (9)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное