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

» Вопросы по Delphi

Автор: HelL_Doctor
Дата сообщения: 14.04.2005 04:50
а нет видишь в чем загвозтка мало того что надо скопировать так и дискета должна быть сделанна под загрузчик.
Автор: FAngel
Дата сообщения: 14.04.2005 05:39
HelL_Doctor
Если будешь копировать загрузочную дискету посекторно, получится загрузочная. Но я так понимаю тебе надо самому создать дискету ? Когда то на Паскале я делал нечто похожее на DiskDupe, если найду исходники могу дать, только в вине совсем друго принцип ... Скопировать дискету легко, создать самому проблематично.
Автор: Shadi
Дата сообщения: 14.04.2005 08:27
Всем привет!
Есть вопрос. Делаю "выплывающую панель" так:

if not PnMain.Visible then
begin
PnMain.Height := 0;
PnMain.Visible := True;
i := 0;
while i <= 265 do
begin
PnMain.Height := i + 25;
i := i + 25;
end; // while
end;

Но.. Будет ли это работать на слабых машинах нормально? Может есть другие верные и более правильные решения?
Заранее благодарен.
Автор: MrZeRo
Дата сообщения: 14.04.2005 09:19
Shadi
Я бы делал через таймер, так как в Вашем случае скорость перемещения будет зависеть от производительности компьютера, а это нехорошо.
Автор: Shadi
Дата сообщения: 14.04.2005 10:52
MrZeRo

Маленький примерчик плиз....
Автор: EZH
Дата сообщения: 14.04.2005 11:16
Shadi
Просто в событии OnTimer напиши что то вроде

if i <= 265 then
begin
PnMain.Height := i + 25;
i := i + 25;
end;


Добавлено:
i должна быть объявлена как член класса, а не переменная метода
Автор: HelL_Doctor
Дата сообщения: 15.04.2005 08:25
FAngel
Подскажи пожалуйста, как копировать дискету по секторам
Автор: FAngel
Дата сообщения: 15.04.2005 11:51
HelL_Doctor
В досе чтение сектора выглядело примерно так :
Function ReadBoot:Integer;
Var b:array[0..1024] of Byte;Reg:Registers;
Begin
Reg.bx := Ofs(b);
Reg.es := Seg(b);
Reg.ah:=$02;
REg.al:=$1;
reg.ch:=$0;
reg.cl:=$1;
reg.dl:=$80;
reg.dh:=$1;
intr($13,reg);
ReadBoot:=b[39]+b[40]+b[41]+b[42];
End;
Функция читает загрузочный сектор диска и возвращает его серийный номер (FAT16) .... Все в вине есно работать не будет

Вот тут http://www.relib.com/forums/topic.asp?id=813614 народ решал проблему с чтением сектора дискеты, тебе подойдет.
Автор: YFred
Дата сообщения: 15.04.2005 13:03
Люди, подскажите как написать системную службу на Delphi
Автор: FAngel
Дата сообщения: 15.04.2005 13:29
YFred
File, New, Other, Service и вперед
Автор: Pinocchio
Дата сообщения: 15.04.2005 15:13
YFred
Program Files\Borland\Delphi7\Source\Vcl\ScktSrvr.dpr - эту фигнею половина современных COM/DCOM приложений и не только на делпхи используют.
Автор: YuraseK
Дата сообщения: 15.04.2005 20:55
To All

Может кто сталкивался с такой проблемой в Delphi 7. Проблема заключается в том, что при использовании TChart 7 в проекте были задействованы события OnZoom, OnUndoZoom, OnScroll, для которых были написаны обработчики. Так вот прикол заключается в том, что после сохранения всех изменений в проекте и при последующей загрузке проекта, связь на закладке events для этих событий сбрасывается. Если же создать обработку событий, отличных от трёх вышеперечисленных, то для этих событий на закладке events всё отображается как положено. В чём может быть причина и каковы возможные пути её решения?

Заранее спасибо
Автор: Ke
Дата сообщения: 18.04.2005 05:35
YuraseK

Цитата:
Так вот прикол заключается в том, что после сохранения всех изменений в проекте и при последующей загрузке проекта, связь на закладке events для этих событий сбрасывается.

Глюк наверно.


Цитата:
В чём может быть причина и каковы возможные пути её решения?

Перезагрузка ?
Можно попробывать переименовать как нибудь по-другому.
Автор: YFred
Дата сообщения: 18.04.2005 09:22
FAngel

Цитата:
File, New, Other, Service и впере

А как такую программу потом запустить как сервис.
Автор: FAngel
Дата сообщения: 18.04.2005 11:52
YFred
Обычно сервис сначала регистрируют, потом его можно например через консоль запустить.

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Инсталляция/удаление сервисов под НТ.

Функции для создавания и удаления NT Services.
Можно создать NT Service от текущее приложение. Параметры:
1. CreateNTService(ExecutablePath,ServiceName: String)
ExecutablePath - Полный путь к изполнимого файла от которого создавается NT Service
ServiceName - Имя сервиза которое отобразится в Service Control Manager
Результат:
true - если операциая завершена успешно
false - если есть ошибка. Можно произвести call то
GetLastError чтобы информироваться об естество ошибки
2. DeleteNTService(ServiceName: String):boolean;
ServiceName - имя сервиза подлежающии удаления
Результат:
true - если операциая завершена успешно
false - если есть ошибка. Можно произвести call то GetLastError чтобы
информироваться об естество ошибки

Зависимости: WinSVC, Windows
Автор: Alex Kantchev, stoma@bitex.bg
Copyright: Собственное написание
Дата: 19 июня 2002 г.
***************************************************** }

// CreateNTService(ExecutablePath,ServiceName: String)
// ExecutablePath - Полный путь к изполнимого файла от
// которого создавается NT Service
// ServiceName - Имя сервиза которое отобразится
// в Service Control Manager Результат:
//Результат:
// true - если операциая завершена успешно
// false - если есть ошибка. Можно произвести
// call то GetLastError чтобы информироваться об
// естество ошибки

function CreateNTService(ExecutablePath, ServiceName: string): boolean;
var
hNewService, hSCMgr: SC_HANDLE;
// Rights: DWORD;
FuncRetVal: Boolean;
begin
FuncRetVal := False;
hSCMgr := OpenSCManager(nil, nil, SC_MANAGER_CREATE_SERVICE);
if (hSCMgr <> 0) then
begin
//Custom service access rights may be built here
//we use GENERIC_EXECUTE which is combination of
//STANDARD_RIGHTS_EXECUTE, SERVICE_START, SERVICE_STOP,
//SERVICE_PAUSE_CONTINUE, and SERVICE_USER_DEFINED_CONTROL
//You can create own rights and use them as shown in the
//commented line below.

//Rights := STANDARD_RIGHTS_REQUIRED or SERVICE_START or SERVICE_STOP
// or SERVICE_QUERY_STATUS or SERVICE_PAUSE_CONTINUE or
// SERVICE_INTERROGATE;

hNewService := CreateService(hSCMgr, PChar(ServiceName), PChar(ServiceName),
STANDARD_RIGHTS_REQUIRED, SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
PChar(ExecutablePath), nil, nil, nil, nil, nil);
CloseServiceHandle(hSCMgr);
if (hNewService <> 0) then
FuncRetVal := true
else
FuncRetVal := false;
end;
CreateNTService := FuncRetVal;
end;

Запуск сервиса :

procedure StartService(ServiceName: string);
var

schService,
schSCManager: Dword;
p: PChar;
begin

p := nil;
schSCManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS);
if schSCManager = 0 then
RaiseLastWin32Error;
try
schService := OpenService(schSCManager, PChar(ServiceName),
SERVICE_ALL_ACCESS);
if schService = 0 then
RaiseLastWin32Error;
try
if not Winsvc.startService(schService, 0, p) then
RaiseLastWin32Error;
finally
CloseServiceHandle(schService);
end;
finally
CloseServiceHandle(schSCManager);
end;
end;


Автор: vserd
Дата сообщения: 18.04.2005 12:28
YuraseK

Цитата:
Так вот прикол заключается в том, что после сохранения всех изменений в проекте и при последующей загрузке проекта, связь на закладке events для этих событий сбрасывается.

Иногда такое наблюдалось и на младших версиях. Просто вставь в код принудительное прописывание этих обработчиков. (самое простое решение).
Второе решение это попробовать создать форму заново, не всегда но помогало.
Автор: MrZeRo
Дата сообщения: 19.04.2005 14:41
YuraseK
Я бы воспользовался версией Tee Chart Pro (поставляется отдельно от Delphi), там есть исходники, можно в случае чего определить причину. Сам пользуюсь постоянно только Pro - версией, и все благополучно было пока.
Автор: papirus3
Дата сообщения: 19.04.2005 21:33
Может здесь помогут.
Необходимо написать генератор случайный чисел работающий по нормальному распределению. Алоритм написан необходимо построить график и вывести таблицу вероятность переода из каждой точки в любую. Проблема заключается в том что вероятность в центре фигуры по таблице идёт реальная уменьшаясь к краям. Но на последних значениях вместо того что-бы обратиться практически в 0 наблюдается необьяснимый всплеск. Причём чем больше количество опытов тем результат на концах более бредовый. В чём может быть проблема.

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, ComCtrls,
Grids,math;

type
TForm1 = class(TForm)
Chart1: TChart;
Button1: TButton;
LECount: TLabeledEdit;
LEDis: TLabeledEdit;
PB: TProgressBar;
Label1: TLabel;
SG: TStringGrid;
LEMat: TLabeledEdit;
Series1: TAreaSeries;
procedure Button1Click(Sender: TObject);
private
procedure GrdClear;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.GrdClear; //&#207;&#240;&#238;&#246;&#229;&#228;&#243;&#240;&#224; &#238;&#247;&#232;&#241;&#242;&#234;&#232;
var
i,j:byte;
begin
SG.Cols[0].Clear;
for i:=1 to 30 do
begin
SG.Cols[i].Clear;
SG.Cells[0,i]:=inttostr(i);
SG.Cells[i,0]:=inttostr(i);
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k,l,colcount,mat:integer;
count: array [-100 .. 100]of longint;
cnt:array[-34..34,-34..34] of longint;
cnt2:array[-34..34] of longint;
dis,znach,znachp:real;
numcount,min:longint;
U : Double;
V : Double;
S : Double;
Sum : Double;
begin
Button1.Caption:='&#195;&#229;&#237;&#229;&#240;&#232;&#240;&#243;&#229;&#242;&#241;&#255; ...';
Button1.Enabled:=false;
Button1.Repaint;
PB.Position:=0;
PB.Max:=0;
PB.Min:=0;
colcount:=strtoint(LECount.Text);
dis:=strtofloat(LEDis.Text);
mat:=strtoint(LEMat.Text);
Chart1.Series[0].Clear;
PB.Max:=colcount;
for i:=-34 to 34 do cnt2[i]:=1;
for i:=-34 to 34 do for j:= -34 to 34 do cnt[i,j]:=0;
for i:=-100 to 100 do count[i]:=0;
znachp:=1;
for i:=0 to colcount-1 do
begin

sum:=2;
repeat
u := (2*floor( Random(2))-1)*Random;
v := (2*floor(Random(2))-1)*Random;
sum := u*u+v*v;
until (sum<1) and (sum>0);
sum := sqrt(-2*ln(sum)/sum);
znach := dis*u*sum+mat;

if (znach>-99) and (znach <99) then
begin
count[round(znach)]:=count[round(znach)]+1;

k:=round(znachp);
if k<-99 then k:=-99;
if k>99 then k:=99;
k:=k div 3;
l:=round(znach);
if l<-99 then l:=-99;
if l>99 then l:=99;
l:=l div 3;
cnt[k,l]:=cnt[k,l]+1;
cnt2[l]:=cnt2[l]+1;
znachp:=znach;
end;
if (i /(colcount div 100))=(i div (colcount div 100)) then PB.Position:=i;
end;

//&#209;&#242;&#240;&#238;&#232;&#236; &#227;&#240;&#224;&#244;&#232;&#234;
for i:=-99 to 99 do
begin
if(count[i]>0) then Chart1.Series[0].AddXY(i,count[i]);
end;

numcount:=0;
min:=-500;
for i:=-33 to 33 do
if cnt2[i]>1 then
begin
numcount:=numcount+1;
if min=-500 then min:=i;
end;

//&#195;&#240;&#224;&#237;&#232;&#246;&#251; &#228;&#235;&#255; &#242;&#224;&#225;&#235;&#232;&#246;&#251;
SG.ColCount:=numcount+2;
SG.RowCount:=numcount+2;

//&#205;&#243;&#236;&#229;&#240;&#243;&#229;&#236; &#242;&#224;&#225;&#235;&#232;&#246;&#243;
for i:=min to min+numcount do
begin
SG.Cells[0,i-min+1]:=inttostr(i);
SG.Cells[i-min+1,0]:=inttostr(i);
end;

//&#199;&#224;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#242;&#224;&#225;&#235;&#232;&#246;&#243;
for i:=min to min+numcount do
for j:=min to min+numcount do
if cnt2[j]<>1 then SG.Cells[i-min+1,j-min+1]:=floattostr(cnt[j,i]/(cnt2[j]-1)*100); //&#199;&#224;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#255;&#247;&#229;&#233;&#234;&#232;
PB.Position:=colcount;
Button1.Caption:='&#195;&#229;&#237;&#229;&#240;&#232;&#240;&#238;&#226;&#224;&#242;&#252;';
Button1.Enabled:=true;
end;

end.

Русский текст здесь был несущественнен.
http://up.li.ru/files/2005/04/19/53787.JPG;ACDSee+7.0+BMP+Image.JPG
Автор: Larry Laffer
Дата сообщения: 23.04.2005 11:22
Подскажите, где можно почитать про программирование сервисов на Delphi? Общий принцип понятен, но хотелось бы узнать о некоторых тонкостях (включая создание событий типа OnInstall и пр.)

Заранее благодарен...
Автор: Tema
Дата сообщения: 23.04.2005 14:32
papirus3
Слушай, кинь человеческую версию программы, а не
Цитата:
//&#199;&#224;&#239;&#238;&#235;&#237;&#255;&#229;&#236; &#242;&#224;&#225;&#235;&#232;&#246;&#243;

Совершенно пропадает желание разбираться.
Сделай, чтобы было по-русски.


Добавлено:
Larry Laffer
Думаю много можно найти, например, тут: http://www.delphikingdom.ru/table/search.asp?namekey=%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81&ItemID=&isQuestion=1&Qwaddress=&TypeEqv=0&Count=10
Автор: papirus3
Дата сообщения: 23.04.2005 16:53
Tema
В общем здесь прога.
http://webfile.ru/272395
В листинге есть пару пометок.
Посмотри может что наёдешь. В понедельник утром крайний срок сдачи.
Автор: Tema
Дата сообщения: 23.04.2005 21:57
papirus3
Поясни проблему на примере каком-нибудь. Я не понимаю в чём проблема у тебя.
Кстати:

что там внизу и справа в таблице 9 и 10-я колонки делают, если в минус только до 8?
Я не понял что НУЖНО ПОЛУЧИТЬ.
Автор: papirus3
Дата сообщения: 24.04.2005 14:13
Tema
Так вот в этом и проблема в данном случае в -8 участке (кстати участки примерно по 3 точки) т.е. -8 участок это где-то X=-8*3=-24 вероятность попадания в эти участки должна быть ещё меньше чем -7 а тут смотри вероятность того что точка после участка -1 (это строка) независимо и случайно попадёт на участок -7 (это столбец на пересечении этой строки и столбца) равна 0,002 а на участок -8 должна быть ещё меньше а она вдруг 5,22 Так-же и справа. Причём если увеличить кол-во испытаний то точность должна увеличиваться а вспесков напротив становиться даже больше. Соответственно чем больше дисперсия тем больше такого бреда. И в чём тут дело я разбираюсь уже 2 недели (тогда был сроки сдачи курсовой =) )

Добавлено:
Tema
Что там колонки делают не суть важно мне нужно другой глюк исправить что-бы числа нормально от центра уменьшались.
Кстати попробовал сделать 2 SG и в один записывал то что и получалось а в другой при записи значение умножил не на 100 как обычно (ну что-бы получалась вероятность в процентах) а на 1000 и смотри что получилось.
При умножении на 100 там опять 5,22 (кстати числа всегде и везде разные а тут ВСЕГДА 5,22 правда иногда исчезает) а на 1000 там 0,00522 что уже более менее возможно (хотя опять-же откуда оно берётся?)
http://up.li.ru/files/2005/04/24/55626.JPG;ACDSee+7.0+BMP+Image.JPG
Автор: YuraseK
Дата сообщения: 24.04.2005 23:43
Может кто сталкивался со следующей пробемой в Delphi с компонентом Memo. Как без всяких извратов изменить содержимое Memo, чтобы после этого изменения при помощи стандартного Memo.Undo можно было бы отменить эти изменения?
Автор: ShIvADeSt
Дата сообщения: 25.04.2005 01:36
YuraseK

Цитата:
Как без всяких извратов изменить содержимое Memo, чтобы после этого изменения при помощи стандартного Memo.Undo можно было бы отменить эти изменения?

Обычное Undo отменяет ровно одно последнее изменение, если хочешь большего, то создавай очередь изменений и в общем начинай извращаться иначе никак. Как вариант, просто перед самым первм изменением копируешь в переменную текст всего Мемо и событии Undo обратно запихиваешь туда его первоначальное значение.
Автор: DimonXP
Дата сообщения: 25.04.2005 10:57
Начал юзать D9. Прохожу по редактору кода и среда время от врмени начинает жуткол тормозить, виснет секунды на 3. Может там каие проврки тяжелые происходят, кто знает?
Автор: OdesitVadim
Дата сообщения: 25.04.2005 11:04
DimonXP
Подобное наблюдается и в 7. Это связано стем, что делфа строит "таблицу" что где обявлено, чтобы когда навёл на переменную, всплывала подсказка.
Автор: DimonXP
Дата сообщения: 25.04.2005 12:31
Вот так получше
Tools | Editor Options | Code Insight

В группе Automatic features снять все птички, кроме Tooltip expression evaluation. При необходимости используйте Ctrl+пробел (для Code completion) и Ctrl+Shift+пробел (для параметров функций).
Автор: 2Polkan
Дата сообщения: 26.04.2005 14:33
Люди... а можно из DBGrid убрать "стрелочку"? Ну, такая вертикальная колонка слева, там стрелочка показывает выбранную строку .
Автор: EZH
Дата сообщения: 26.04.2005 16:31
2Polkan
В Options > dgIndicator

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

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


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