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

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

Автор: ShIvADeSt
Дата сообщения: 20.04.2006 00:52
Продолжение темы http://forum.ru-board.com/topic.cgi?forum=33&topic=3647&start=2020#lt
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.
Автор: hhhhhhhhhhhhhhhhhh
Дата сообщения: 20.04.2006 12:40
Я только начинаю программировать

У меня вопрос такой:
Почемк не раскрывается списо DBComboBox1
Вроде подключила к соответствующей DataSource и поле-источник выбрала, но при запуске список раскрывается, но там его ничего нет, только первый пункт.
А DBLookupComboBox1 раскрывает список не дает выбрать пункт.
Вроде меняла все!!!! их (DBComboBox1, DBLookupComboBox1) свойсва, но ничего!

Как-то я это делала и получалось. Это было давно и теперь никак не вспомню!

Автор: ast1
Дата сообщения: 20.04.2006 15:06
hhhhhhhhhhhhhhhhhh
в DBComboBox список варинтов выбора - св-во Items [Tstrings]

а в DBLookupComboBox список составляется на основе другого DataSource'а
( ListSource - DataSource справочник
KeyField - поле значение которого будет подставлятся при выборе
ListField - поле к-е будет отображатся в комбобоксе )

т.е. есть у тебя таблица main с полем color - integer к-е надо редактировать

И таблица справочник spr_colors с полями ID - INTEGER, VALUE - VARCHAR
CСоотвктственно для DBLookupComboBox

datasource - main
datafield - color

listsource - spr_colors
keyfield - id
ListField - value
Автор: reenoip
Дата сообщения: 20.04.2006 16:00
Как можно вывести в эдит/лейбл/батон "00.00.00" вместо "00/00/00"?
Спасибо.
Автор: ast1
Дата сообщения: 20.04.2006 16:28
reenoip
А можно поточнее вопрос ?
В смысле "00.00.00" вместо "00/00/00" и на какой контрол конкретно и зачем ?

если ты про вывод даты в полях то:
displayFormat dd.mm.yy или dd.mm.yyyy смотря сколько цифр для года нужно
Автор: reenoip
Дата сообщения: 20.04.2006 16:46
ast1, получаю с чужого источника дату в виде "00/00/00", и вывожу её на форму в, скажем, эдите. Но мне как-то непривычно на разделители типа "//" смотреть, хотелось бы всё по старинке - через точку. Именно поэтому и спросил, как можно это преобразовать...


А вот насчёт "зачем"... Ну, не знаю...
Каприз мой, что ли...
Автор: Zver1992
Дата сообщения: 20.04.2006 17:01
Подскажите, нужно чтоб генерировалось случайное число от 58 до 64 и скидывалось в переменную udar. Каким образом эт можно сделать? От 0 до 64 и сам могу
Автор: ast1
Дата сообщения: 20.04.2006 17:03
reenoip

Код:
label1.caption := '20/04/2006'

procedure TMain.Button1Click(Sender: TObject);
var
ch : char;
begin
ch:=DateSeparator;
DateSeparator:='/';
label2.Caption:=DateToStr(StrToDate(label1.Caption));
DateSeparator:=ch;
end;
Автор: Swappp
Дата сообщения: 20.04.2006 17:18
Zver1992

Цитата:
От 0 до 64 и сам могу

Хм, а что мешает генерировать числа от 0 до 6 (64-58), а потом прибвлять 58? Это так, отступление, кончно же присутствуют готовые функции. Но пользоватся тем что есть и что знаешь надо тоже уметь
Автор: Zver1992
Дата сообщения: 20.04.2006 18:25
Спасибо Вариант с сложением оч помог. Терь еще вопрос. Нужно чтоб программа не в лоток сворачивалась (около пуска и левее), а в трей. Как огранизовать?
Автор: reenoip
Дата сообщения: 20.04.2006 18:34
ast1, угу, пойдёт и так, спасибо
Автор: Vengod
Дата сообщения: 20.04.2006 21:43
Я хочу написать программу которая будет отправлять по net send текст написаный в разных Edit[n].text, но процедуре WinExec нужен 'PAnsiChar'. Стало быть мне нужно перевести String в этот самый 'PAnsiChar' - Вопрос: КАК?
Автор: ShIvADeSt
Дата сообщения: 21.04.2006 01:14
Vengod

Цитата:
Я хочу написать программу которая будет отправлять по net send текст написаный в разных Edit[n].text, но процедуре WinExec нужен 'PAnsiChar'.

Вообще то PChar ему нужен, хотя PAnsiChar и PChar одно и тоже, делается так
WinExec(PChar(Edit1.Text),WM_SHOWNORMAL);
Zver1992

Цитата:
Спасибо Вариант с сложением оч помог. Терь еще вопрос. Нужно чтоб программа не в лоток сворачивалась (около пуска и левее), а в трей. Как огранизовать?

Еще разок объясняю, программа в трей не сворачивается, это заблуждение пользователей, на самом деле программе делается hide, а в трее создается иконка. Иконка создается при помощи Shell_NotifyIcon (читаем хелп по ней, или в инете ищем, инфы до кучи) либо при помощи компонент, например RxTrayIcon, которая входит в состав RXLib.
Автор: ArtemiyUO
Дата сообщения: 21.04.2006 06:05
Стоит проблема парсинга действительного большого ХМЛ фаила 50-200 мб.
Нужен SAX.
Сначала пробовал юзать МСХМЛ в сах режиме - не смог разобраться как применять, нигде нет примеров. Если у кого то реально есть рабочий пример. Пожалуйста дайте.
Пробовал SimpleXML - быстро, но не САХ, жрет немеренно памяти, не подходит.
Sax for Pascal, вроде хороший, но очень старый, постоянно какие то проблемы с установкой, постоянно среда кидает экзепекты из за него (Д7, Д10). Может есть у кого адаптированная версия к 7 или 10.
NativeXML - очень хороший, комерческий парсер. Заявлена работа в САХ режиме.
Щас на нем и работаю. НО работа в сах режиме не понятная - он дает указать обработчики, я парсю сам в обработчиках, но ПРИ ЭТОМ он паралельно строит в памяти весь документ. МНЕ ЭТОГО НЕ НАДО, он сжирает 1,5 гб рам(
Кто нибудь знает как заставить его не строить модель дока в памяти, а работать в САХ режиме полностью?
Вообщем хелп, уже склоняюсь к написанию своего примитивного САХ парсера(

Добавлено:
Вроде есть решение, из справки к нативхмл
Whenever a node is found, the OnNodeNew event is fired, and whenever a node is completely loaded, the OnNodeLoaded event is fired.

If you do not want to keep a complete copy of the XML file in memory, for example for huge XML files, you can directly remove the node and free its memory. In that case, add the following code to the OnNodeLoaded event:


procedure TForm1.DoNodeLoaded(Sender: TObject; Node: TXmlNode);
begin
Memo1.Lines.Add(Format('Loaded: Name=%s, Value=%s', [Node.Name, Node.ValueAsString]));
if Node.TreeDepth > 0 then begin
Memo1.Lines.Add(Format('Deleted: Name=%s', [Node.Name]));
Node.Delete;
end;
end;

Автор: RostY
Дата сообщения: 21.04.2006 09:22
Vengod
function NetMessageBufferSend(ServerName, MsgName, FromName: PWideChar; Buf: Pointer; BufLen: Word): word; stdcall;
external 'netapi32.dll' name 'NetMessageBufferSend';

function NetSend(const FromName, MsgName,SendMsg: string): Boolean;
var
PWCMsgName, PWCSendMsg: PWideChar;
PWCFromName: PWideChar;
Error: Word;
begin
try
Error := 1;
GetMem(PWCFromName, 2*Length(FromName)+2);
GetMem(PWCMsgName, 2*Length(MsgName)+2);
GetMem(PWCSendMsg, 2*Length(SendMsg)+2);
StringToWideChar(FromName, PWCFromName, Length(FromName)+2);
StringToWideChar(MsgName, PWCMsgName, Length(MsgName)+2);
StringToWideChar(SendMsg, PWCSendMsg, Length(SendMsg)+2);
Error :=
NetMessageBufferSend(nil, PWCMsgName, PWCFromName, PWCSendMsg,
Length(SendMsg)*2);
finally
FreeMem(PWCFromName);
FreeMem(PWCMsgName);
FreeMem(PWCSendMsg);
Result := Error = 0;
end;
end;
Автор: Vitus_Bering
Дата сообщения: 21.04.2006 12:58
Нужен код для подсчета CRC файла, максимально быстрый! Посоветуйте, плиз.
Автор: ViktorSila
Дата сообщения: 21.04.2006 16:31
Народ как определить серийный номер винчестера(не тома, а именно винчестера). Чтобы выдавало номер который написан на коробке от венчестера.
Автор: OdesitVadim
Дата сообщения: 21.04.2006 16:55
Vitus_Bering
Во ссылочки.
Http://www.delphiworld.narod.ru/base\32_bits_crc.html
Http://www.delphiworld.narod.ru/base\fast_crc32.html
Http://www.delphiworld.narod.ru/base\calc_crc.html
Http://www.delphiworld.narod.ru/base\calc_crc32.html
Http://www.delphiworld.narod.ru/base\hash_crc64.html
Http://www.delphiworld.narod.ru/base\crc32.html
Http://www.delphiworld.narod.ru/base\crc32_2.html

Там есть как банальные решения в лоб так и оптимизированые ассемблерные. По моим тестам, ассемблерный вариант проигрывал делфовскому, но это мож фаза луны не та была
ViktorSila
Http://www.delphiworld.narod.ru/base\get_hdd_serial.html
Автор: SZap
Дата сообщения: 21.04.2006 16:57
Vitus_Bering
Как вычислить CRC-32 для файла (наверное как правильно а не быстро...)
[more=Читать дальше...]
Взято с сайта http://www.swissdelphicenter.ch/en/tipsindex.php

// The constants here are for the CRC-32 generator
// polynomial, as defined in the Microsoft
// Systems Journal, March 1995, pp. 107-108
const
Table: array[0..255] of DWORD =
($00000000, $77073096, $EE0E612C, $990951BA,
$076DC419, $706AF48F, $E963A535, $9E6495A3,
$0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
$09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
$1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
$1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
$136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
$14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
$3B6E20C8, $4C69105E, $D56041E4, $A2677172,
$3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
$35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
$32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
$26D930AC, $51DE003A, $C8D75180, $BFD06116,
$21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
$2802B89E, $5F058808, $C60CD9B2, $B10BE924,
$2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,

$76DC4190, $01DB7106, $98D220BC, $EFD5102A,
$71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
$7807C9A2, $0F00F934, $9609A88E, $E10E9818,
$7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
$6B6B51F4, $1C6C6162, $856530D8, $F262004E,
$6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
$65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
$62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
$4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
$4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
$4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
$44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
$5005713C, $270241AA, $BE0B1010, $C90C2086,
$5768B525, $206F85B3, $B966D409, $CE61E49F,
$5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
$59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,

$EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
$EAD54739, $9DD277AF, $04DB2615, $73DC1683,
$E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
$E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
$F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
$F762575D, $806567CB, $196C3671, $6E6B06E7,
$FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
$F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
$D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
$D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
$D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
$DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
$CB61B38C, $BC66831A, $256FD2A0, $5268E236,
$CC0C7795, $BB0B4703, $220216B9, $5505262F,
$C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
$C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,

$9B64C2B0, $EC63F226, $756AA39C, $026D930A,
$9C0906A9, $EB0E363F, $72076785, $05005713,
$95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
$92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
$86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
$81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
$88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
$8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
$A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
$A7672661, $D06016F7, $4969474D, $3E6E77DB,
$AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
$A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
$BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
$BAD03605, $CDD70693, $54DE5729, $23D967BF,
$B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
$B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);

type
//----------------------------------crc32----------------------------------
{$IFDEF VER130} // This is a bit awkward
// 8-byte integer
TInteger8 = Int64; // Delphi 5
{$ELSE}
{$IFDEF VER120}
TInteger8 = Int64; // Delphi 4
{$ELSE}
TInteger8 = COMP; // Delphi 2 or 3
{$ENDIF}
{$ENDIF}
//----------------------------------crc32----------------------------------


// Use CalcCRC32 as a procedure so CRCValue can be passed in but
// also returned. This allows multiple calls to CalcCRC32 for
// the "same" CRC-32 calculation.
procedure CalcCRC32(p: Pointer; ByteCount: DWORD; var CRCValue: DWORD);
// The following is a little cryptic (but executes very quickly).
// The algorithm is as follows:
// 1. exclusive-or the input byte with the low-order byte of
// the CRC register to get an INDEX
// 2. shift the CRC register eight bits to the right
// 3. exclusive-or the CRC register with the contents of Table[INDEX]
// 4. repeat steps 1 through 3 for all bytes
var
i: DWORD;
q: ^BYTE;
begin
q := p;
for i := 0 to ByteCount - 1 do
begin
CRCvalue := (CRCvalue shr 8) xor
Table[q^ xor (CRCvalue and $000000FF)];
Inc(q)
end
end {CalcCRC32};

function CalcStringCRC32(s: string; out CRC32: DWORD): Boolean;
var
CRC32Table: DWORD;
begin
// Verify the table used to compute the CRCs has not been modified.
// Thanks to Gary Williams for this suggestion, Jan. 2003.
CRC32Table := $FFFFFFFF;
CalcCRC32(Addr(Table[0]), SizeOf(Table), CRC32Table);
CRC32Table := not CRC32Table;

if CRC32Table <> $6FCF9E13 then ShowMessage('CRC32 Table CRC32 is ' +
IntToHex(Crc32Table, 8) +
', expecting $6FCF9E13')
else
begin
CRC32 := $FFFFFFFF; // To match PKZIP
if Length(s) > 0 // Avoid access violation in D4
then CalcCRC32(Addr(s[1]), Length(s), CRC32);
CRC32 := not CRC32; // To match PKZIP
end;
end;

procedure CalcFileCRC32(FromName: string; var CRCvalue: DWORD;
var TotalBytes: TInteger8;
var error: Word);
var
Stream: TMemoryStream;
begin
error := 0;
CRCValue := $FFFFFFFF;
Stream := TMemoryStream.Create;
try
try
Stream.LoadFromFile(FromName);
if Stream.Size > 0 then CalcCRC32(Stream.Memory, Stream.Size, CRCvalue)
except
on E: EReadError do
error := 1
end;
CRCvalue := not CRCvalue
finally
Stream.Free
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
CRC32: DWORD;
begin
s := 'Test String';
if CalcStringCRC32(s, CRC32) then
ShowMessage(IntToStr(crc32));
end;
[/more]
Автор: Vitus_Bering
Дата сообщения: 21.04.2006 19:15
OdesitVadim
SZap
Благодарю за полные ответы.

Автор: OrlangurStep
Дата сообщения: 21.04.2006 19:45
Помогите, плиз. В delphi7 enterprise возникает ошибка, не могу понять почему.
Кусок кода вызывающий ошибку:

Код:
public
{ Public declarations }
procedure ShowInputWindow (WindowCaption, AskCaption: string);
Автор: EVD
Дата сообщения: 21.04.2006 20:43
OrlangurStep
Компилятор не может найти реализацию процедуры.
У тебя процедура сама где находится?
Автор: vserd
Дата сообщения: 22.04.2006 15:03
OrlangurStep

Цитата:
Кто объяснит? Как исправить эту ошибку?

В секции Implimentation написать такой код

procedure TInputWindowForm.ShowInputWindow (WindowCaption, AskCaption: string);
begin
end;
Автор: OrlangurStep
Дата сообщения: 22.04.2006 20:02
vserd
Большое спасибо, в разделе Implementetion в имени процедеры не написал класс которому она принадлежит

Автор: 31416
Дата сообщения: 23.04.2006 23:55
ТАкой вопрос по дельфи: есть массив z:array of integer

stack.push(z);
....юзаем z как хотим )
z:=stack.pop; //вот тут ругается! как востановить память которая принадлежала z?
Автор: SZap
Дата сообщения: 24.04.2006 13:40
Посоветуйте пожалуйста компоненты для написания программы обработки Excel файлов (чтение, запись и т.д.)...
Автор: DroN_S
Дата сообщения: 24.04.2006 13:44
SZap
ExcelApplication...
а лучше работай через Variant.... и почитай книги про это...
Автор: SZap
Дата сообщения: 24.04.2006 13:48
DroN_S
Спасибо, а что посоветуете почитать???
Автор: hhhhhhhhhhhhhhhhhh
Дата сообщения: 24.04.2006 13:51
ast1



Цитата:
( ListSource - DataSource справочник
KeyField - поле значение которого будет подставлятся при выборе
ListField - поле к-е будет отображатся в комбобоксе )



Да, все так и есть. Но DBLookupComboBox1 находится как-будто в состоянии Enabled:=false.
Список хоть и раскрывается, но выбрать невозможно!
Уже почти неделю с ним вожусь! И немогу понять в чем дело!!!???
плиз, помогите!
Автор: XPEHOMETP
Дата сообщения: 24.04.2006 13:54
SZap

Можно поискать что-нибудь вроде компонентов ActiveX для работы с файлами Ёкселя. Например, такой явно сгодится - XLSConverterX:

http://www.softinterface.com/Convert-Excel-ActiveX/Convert-Excel-ActiveX.htm

Или еще такая штука - Excel Component Suite:

http://www.softkey.ru/catalog/program.php?ID=8023

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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