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

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

Автор: dene14
Дата сообщения: 27.10.2006 10:55
Подскажите пожалуйста как сделать так, чтобы не убирались ничего не значащие нули в целом числе...

Вот на всякий случай код модуля:
[more]unit CMR;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Oracle, AppUtils, Mask, ToolEdit;

type
TfrmCMR = class(TForm)
Label3: TLabel;
btnSend: TBitBtn;
BitBtn2: TBitBtn;
cmrText1: TMaskEdit;
cmrText2: TMaskEdit;
Label1: TLabel;
AddDate: TDateEdit;
Label2: TLabel;
procedure btnSendClick(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FCMRID: Integer;
FCMRStatus: Integer;
public
{ Public declarations }
procedure CreateCMR;
end;

var
frmCMR: TfrmCMR;

implementation

uses DBSess;

{$I TFS_Messages.pas}

{$R *.DFM}

procedure TfrmCMR.CreateCMR;
begin
FCMRID := 0;
FCMRStatus := 0;
AddDate.Date := 0;
end;

procedure TfrmCMR.btnSendClick(Sender: TObject);
begin
Close;
end;

procedure TfrmCMR.BitBtn2Click(Sender: TObject);
begin
Close;
end;

procedure TfrmCMR.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;

procedure TfrmCMR.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
newID,cmrSiries: Integer;

begin
if ModalResult = mrOk then
begin
if FCMRStatus = 1 then
begin
if MessageDlg('Ñîîáùåíèå óæå îòïðàâëåíî. Îòïðàâèòü ïîâòîðíî?',
mtConfirmation, [mbYes, mbNo], 0) <> mrYes then
begin
CanClose := True;
Exit;
end;
end;
for cmrSiries := strtoint(cmrText1.Text) to strtoint(cmrText2.Text) do // значение cmrSiries вставляется в базу (многократно, цикл как вы видите, но если скажем значение cmrText1.Text или cmrText2.Text имеют вид 0043984, то нули убираются и вставляется только 43984)
with TOracleQuery.Create(Application) do
begin
Session := dbs;
if FCMRID = 0 then
begin
SQL.Add('SELECT DEVEL.SEQ_CMR.NEXTVAL ID FROM DUAL');
Execute;
newID := FieldAsInteger('ID');
SQL.Clear;

SQL.Add('INSERT INTO DEVEL.CMR(');
SQL.Add('CMRID, ADDDATE, CMRNUM');
SQL.Add(')VALUES(');
SQL.Add(':CMRID, :ADDDATE, :CMRNUM');
SQL.Add(')');
end else
begin
SQL.Add('UPDATE DEVEL.CMR SET');
SQL.Add('ADDDATE=:ADDDATE, CMRNUM=:CMRNUM, STATUS=NULL');
SQL.Add('WHERE CMRID=:CMRID');
end;

DeclareVariable('CMRID', otInteger);
DeclareVariable('ADDDATE', otDate);
DeclareVariable('CMRNUM', otString);

if FCMRID = 0 then
begin
SetVariable('CMRID', newID);
end else
begin
SetVariable('CMRID', FCMRID);
end;

SetVariable('ADDDATE', AddDate.Date);
SetVariable('CMRNUM', cmrSiries);

Execute;

dbs.Commit;

AppBroadcast(TFSM_REFRESH_CMRLIST, 1, 0);
end;
end;
end;

procedure TfrmCMR.FormCreate(Sender: TObject);
begin
FCMRID := 0;
end;

end.[/more]
Автор: RayZ
Дата сообщения: 27.10.2006 11:07
vladk1973, то есть, как?

все приведения в памяти и происходят.
(hex) mysingletemp -> (float) mysingle.


Код:
// подставляем соответственно значение в реверснутое hex
function hex2float(mysingletemp : integer): String;
var
mysinglep:PSingle;
mysingle:single;
begin
mysinglep:=@mysingletemp;
mysingle:=mysinglep^;
return floattostr(mysingle);
end;
Автор: Andysoft3C
Дата сообщения: 27.10.2006 11:37
RayZ
стандарт IEEE754?
Честно говоря незнаю, выдает эл. счетчик Меркурий 230

Add

Что-то не сходится
A1. Это данные поступающие из порта
3C01430D
3C01500F
3C016E11
A2
A7009946
A7007947
A7006D48

A1. Показания прибора
20712,874 (так перевела функция 0,00788952130824327)
..
A2.
10962,63 (так перевела функция -1,78466580909634E-15)
Автор: vortex0220
Дата сообщения: 27.10.2006 12:29

Цитата:
Если, твое, то так:

procedure TForm1.Button1Click(Sender: TObject);
var
ProcessID: DWORD;
ProcessHandle: THandle;
ThreadHandle: THandle;
begin
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,
false, ProcessID);
SetPriorityClass(ProcessHandle, REALTIME_PRIORITY_CLASS);
ThreadHandle := GetCurrentThread;
SetThreadPriority(ThreadHandle, THREAD_PRIORITY_TIME_CRITICAL);
end;

По поводу хинта, я делаю вот так
.



что то не получилось
Автор: RomanTim
Дата сообщения: 27.10.2006 14:06
vortex0220
А если так попробовать:
if not SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS) then
ShowMessage('SetPriorityClass error: '+IntToStr(GetLastError));
if not SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_HIGHEST) then
ShowMessage('SetThreadPriority error: '+IntToStr(GetLastError));

dene14
Ты бы хоть в листинге комментарием отметил - в каком месте у тебя нули "убираются", что бы это ни значило.
Если при преобразовании в строку - то смотри в сторону функции Format, а вообще формулируй вопросы более внятно и без текста всей программы - не так много мазохистов, котрым нравится лопатить чужой код
Автор: vortex0220
Дата сообщения: 27.10.2006 14:39
RomanTim
А если так попробовать:
if not SetPriorityClass(GetCurrentProcess, HIGH_PRIORITY_CLASS) then
ShowMessage('SetPriorityClass error: '+IntToStr(GetLastError));
if not SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_HIGHEST) then
ShowMessage('SetThreadPriority error: '+IntToStr(GetLastError));

Мне не нужно менять приоритет своего приложения...
а нужно запустить внешнюю программу с определенным приоритетом.
Автор: RostY
Дата сообщения: 27.10.2006 14:47
vortex0220
Запускай через CreateProcess и указывай при этом приоритет:
dwCreationFlags parameter also controls the new process's priority class...
Автор: vortex0220
Дата сообщения: 27.10.2006 15:06
RostY
Запускай через CreateProcess и указывай при этом приоритет:
dwCreationFlags parameter also controls the new process's priority class...

Запускается со средним приоритетом.... не могу ни как изменить
Автор: goodwen
Дата сообщения: 27.10.2006 16:29
Всем привет.
На форме есть компонент XPManifest1 а также компонент RadioGroup1. Как освободить RadioGroup от влияния XPManifest1 ? Тесть чтоб радиогруп не был в стиле XP но при этом все остальные компоненты на форме были.
Автор: Jokerjar
Дата сообщения: 27.10.2006 16:44
goodwen, помойму, так нельзя. Используй альтернативные компоненты, например Vcl Skin. Классная штука, можешь посмотреть - вот прога с использованием этого компонента
Автор: dene14
Дата сообщения: 27.10.2006 17:34
RomanTim
Подредактировал, глянь плиззз.
Автор: goodwen
Дата сообщения: 27.10.2006 19:51
Jokerjar
Спасибо штука хорошая но встает другая проблема как мне изменить цвет формы ?
Потуму, что изначально она у меня черная
Автор: andead
Дата сообщения: 27.10.2006 22:03
goodwen
можно использовать контролы из DevExpress, там над стилем как угодно можно извращаться)
Автор: Jokerjar
Дата сообщения: 28.10.2006 06:26
goodwen, для компонента существует много скинов. У меня на компе есть их штук 30. Если хош, поделюсь.
Автор: RomanTim
Дата сообщения: 28.10.2006 10:49
dene14
Здесь SetVariable('CMRNUM', cmrSiries)? Так я ж уже написал - используй Format. Например так
SetVariable('CMRNUM', Format('%.'+Length(cmrText1.Text)+'d', [cmrSiries])

vortex0220
[more=Здесь]procedure TForm1.Button1Click(Sender: TObject);
var
si: TStartupInfo;
pi: TProcessInformation;
begin
FillChar(si, SizeOf(si), 0);
si.cb := SizeOf(si);
if CreateProcess(nil, 'calc.exe', nil, nil, False, HIGH_PRIORITY_CLASS, nil, nil, si, pi) then begin
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
end;
end;[/more] код, который запускает калькулятор, приоритет в высокий выставляется
Автор: xitsmex
Дата сообщения: 28.10.2006 11:59
goodwen
Правда, самое красивое решение - DevExpress. Уйма свойств, возможность отбражать в NativeStyle и так, как хочешь. С манифестом есть другая, более сложная проблема - он принудительно делает контролы UNICODE. В них можно ввести текст на любом языке (русский, греческий, китайский), но достучаться до этого текста ты не сможешь. Если локализаци не придвидится - можно на это забить.
Автор: vortex0220
Дата сообщения: 28.10.2006 12:06
RomanTim
Спасибо. Сработало.

как теперь проверить запустилась ли внешняя программа?
Автор: Sleepwalker
Дата сообщения: 28.10.2006 12:26
vortex0220

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


можно через FindWindow найти окно по заголовку.
Автор: goodwen
Дата сообщения: 28.10.2006 15:37
Jokerjar
Поделись ) goodwens@rambler.ru
Автор: Jokerjar
Дата сообщения: 28.10.2006 15:52
goodwen, сам компонент нужен? Или только скины?
Автор: goodwen
Дата сообщения: 28.10.2006 16:54
Jokerjar
Только скины

Добавлено:
andead
Ссылкой не паделишься?
Автор: vortex0220
Дата сообщения: 28.10.2006 20:00
Sleepwalker

Цитата:
можно через FindWindow найти окно по заголовку.

окна нет... есть только процесс
Автор: MFPSoftware
Дата сообщения: 28.10.2006 20:30
Ребят, может кто мне подсказать на конкретном примере, как в реестре открыть переменную с типом REG_MULTI_SZ ?

Например, вот здесь переменная такого типа:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{45D7D63F-9BFA-4AE6-8641-608006F378A8}\DefaultGateway

Как мне записать и прочитать из нее данные? А то из кучи статей по запросу REG_MULTI_SZ я ничего не понял (((
Автор: RomanTim
Дата сообщения: 29.10.2006 09:43
MFPSoftware
[more=Чтение значения]procedure TForm1.Button3Click(Sender: TObject);
var
dbuff: array of Char;
dsize: DWORD;
dtype: DWORD;
n: Integer;
s: string;
begin
with TRegistry.Create do begin
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey('SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{D94CDB78-AB29-491A-93CA-3B18B6933585}', False) then begin
if (RegQueryValueEx(CurrentKey, 'DefaultGateway', nil, @dtype, nil, @dsize) = ERROR_SUCCESS)
and (dtype = REG_MULTI_SZ)
then begin
SetLength(dbuff, dsize);
if RegQueryValueEx(CurrentKey, 'DefaultGateway', nil, @dtype, Pointer(dbuff), @dsize) = ERROR_SUCCESS then begin
n := 0;
while dbuff[n] <> #0 do begin
s := PChar(@dbuff[n]);
Memo1.Lines.Add(s);
Inc(n, Length(s) + 1);
end;
end;
end;
end;
Free;
end;
end;[/more]
Идея в том, что в значении хранится массив строк, оканчивающихся 0. Пустая строка - конец массива (т.е. он заканчивается двумя 0 подряд). Для записи значения формируешь соответствующий массив и записываешь его через RegSetValueEx

vortex0220
А что значит - запустился или нет? Если система вообще не смогла стартовать приложение, то CreateProcess вернет False.
А вот если надо узнать - не произошло ли в нем какой-либу внутренней ошибки - то тут уже все зависит от критерия оценки успешности запуска. Если хватит того, что приложение работает спустя какое то время, то можно запомнить pi.hProcess и спустя нужное время выполнить GetExitCodeProcess. ExitCode = STILL_ACTIVE, значит приложение все еще работает
Автор: andead
Дата сообщения: 29.10.2006 10:30
goodwen

Цитата:
Ссылкой не паделишься?

вот например: http://www.delphifans.com/SoftView/SoftView_2242.html сам PivotGrid можно не ставить
Автор: goodwen
Дата сообщения: 29.10.2006 11:22

Gamefrm.collfiftinImg.enabled:=true;
Gamefrm.collfiftinImg.OnMouseLeave;
Gamefrm.fiftinImg.enabled:=true;
Gamefrm.fiftinImg.OnMouseLeave;
Gamefrm.zalImg.enabled:=true;
Gamefrm.zalfiftinImg.OnMouseLeave;

Подскажите как сократить сие с помощью оператора With ?

with Gamefrm.collfiftinImg, Gamefrm.fiftinImg, Gamefrm.zalfiftinImg do
begin
Enabled:=true;
onMouseLeave(Sender);
end;

Такой вариант не работает ( знаю почему) Вообще я часто вижу как используют конструкции типа with as do … with in do…комбинации их и.т.п. но в имеющихся у меня книжках описана только основная часnь with do. В инете пока тоже ничо нормального не нашел. Кто знает подскажите где почитать




andead
пасиб
Автор: ranc
Дата сообщения: 29.10.2006 13:50
goodwen

with Gamefrm do
begin
collfiftinImg.enabled:=true;
collfiftinImg.OnMouseLeave;
fiftinImg.enabled:=true;
fiftinImg.OnMouseLeave;
zalImg.enabled:=true;
zalfiftinImg.OnMouseLeave;
end;
Автор: goodwen
Дата сообщения: 29.10.2006 14:03
ranc
Нет эт я понял), как чтоп именно само тело было
begin
Enabled:=true;
onMouseLeave(Sender);
end;
Автор: MFPSoftware
Дата сообщения: 29.10.2006 14:09
RomanTim

спасибо. сейчас попытаюсь что-нибудь придумать...
Автор: FRALX
Дата сообщения: 30.10.2006 01:20
goodwen
За раз у всех объектов (без их указания) свойства установить с помощью
With не получится. Обекты все равно надо перебирать и соответственно при таком теле
только
with Gamefrm do begin
with collfiftinImg do begin
enabled:=true;
onMouseLeave(Sender);
end;
with fiftinImg do begin
enabled:=true;
OnMouseLeave(sender);
end;
// --- // --- //
end;
либо писать фунцию но объекты все равно перебирать

with Object as ObjectClass это просто преобразование типа Object к ObjectClass,
а with in это вообще видимо не из делфов

P.S. ( А вообще with дополнительный источник ошибок )

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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