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

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

Автор: RostY
Дата сообщения: 18.10.2006 08:11
RayZ
а так не пробовал ?
CFieldName := CTable.Fields[J].FieldName;
Автор: RayZ
Дата сообщения: 18.10.2006 09:52
ArtemiyUO, потому что именно так нужно было
Цитата:
TMyTable provides properties and methods to gain direct access to records and fields in an underlying server database without writing SQL statements.


RostY, и действительно... Как-то не по людски делал. Спасибо.
Я уже пошел другим путем, который так же оказался работающим:

CFieldName := CTable.FieldDefs.Items[J].Name;
Автор: santila777
Дата сообщения: 18.10.2006 10:07
Пиплы помогите решить простенькую задачку, нужно сделать такую вещ:
Есть 2<=M<=N<=300000
M и N задаются как константы в программе
Программа после запуска выводит на экран все простые числа из диапазона от M до N (включительно M и N)
Если простых чисел в этом диапазоне нет, то выводит «Absent»
Пример эм=2 эн=4, выводит 3
Эм=4, эн=4, выводит Absent
Как это будет выгледить в кодинге?Заранее фенк..

Автор: Bugriy
Дата сообщения: 18.10.2006 10:38
Как импортировать библиотеку типов в Delphi 10? В меню project нет пункта import Type Library.
Автор: RomanTim
Дата сообщения: 18.10.2006 10:57
Bugriy
Component - Import Component и там уже есть Import Type Library
Автор: Bugriy
Дата сообщения: 18.10.2006 11:19
RomanTim
Нет у меня там пункта Import component. Есть New VCL component и Install Packages.
Автор: Jokerjar
Дата сообщения: 18.10.2006 13:10
santila777, вот держи

program Proga;

{$apptype console}

const
M = 1;
N = 25;

var
b: boolean;
i: integer;

function IsProstoe(a: integer): boolean;
var
i: integer;
begin
if a<=2 then exit;
result := true;
for i := 2 to a - 1 do
if a mod i = 0 then
begin
result := false;
exit;
end;
end;

begin
b:=false;
for i:= M to N do
if IsProstoe(i) then
begin
writeln(i);
b:=true;
end;
if not b then
writeln('Absent');
readln;
end.

Надеюсь, это то, что тебе нужно
Автор: RomanTim
Дата сообщения: 18.10.2006 13:28
Bugriy
Должен быть...
Может кривой дистрибутив делфи, может установилось коряво

Jokerjar
Заверни код в [more]
Автор: santila777
Дата сообщения: 18.10.2006 14:02
Jokerjar
от души
Автор: OrlangurStep
Дата сообщения: 18.10.2006 17:23
Подскажите не могу понять, почему не после выполнения процедуры SetNewField не изменяется значение поля Номер.
Проект быложен тут
Автор: andead
Дата сообщения: 18.10.2006 17:54
подскажите, нормально будет работать Delphi 6 и BDS2006 на одном компе?
Автор: RomanTim
Дата сообщения: 18.10.2006 18:29
andead
Должны работать без проблем, по крайней мере 7-ка и 10-ка живут вместе мирно. Разумеется сторонние компоненты надо держать в двух экземплярах - один для Д6, другой для Д10
Автор: Erazer
Дата сообщения: 18.10.2006 18:51
млин не могу поставить JVCL320CompleteJCL197-Build2172 на server2003 дома поставил без проблем, а тут не могу, кажись из-за того что bds2006 на D:,а не на С: как всегда, а мож из - за сервера ?
Лог выглядит так
"build.exe found. Pretest: ok
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
Borland Delphi for Win32 compiler version 18.0
Copyright (c) 1983,2005 Borland Software Corporation
D:\JVCL320CompleteJCL197-Build2172\jcl\source\common\JclFileUtils.pas(134) Warning: W1000 Symbol 'faVolumeID' is deprecated
D:\JVCL320CompleteJCL197-Build2172\jcl\source\common\JclFileUtils.pas(136) Warning: W1000 Symbol 'faVolumeID' is deprecated
D:\JVCL320CompleteJCL197-Build2172\jcl\source\common\JclFileUtils.pas(334) Warning: W1000 Symbol 'faVolumeID' is deprecated
JediInstaller.dpr(14) Fatal: F2039 Could not create output file 'JediInstaller.drf'
** error 1 ** deleting ..\bin\JediInstaller.exe
** error 1 ** deleting installer
Using d10 for build process.
Press ENTER to continue
"
Никто ничего не подскажеть ?
Автор: cryptonium
Дата сообщения: 18.10.2006 19:05
скажите а кто-нибудь применяет в своих проектах DUnit?
Автор: oan42
Дата сообщения: 19.10.2006 07:31
2 Erazer

1) Я бы удалил вручную файл JediInstaller.drf
2) Если не помогает, то поставил бы пакеты вручную.
Автор: Jokerjar
Дата сообщения: 19.10.2006 08:23
Есть текстовый файл, содержащий вот такие записи:

F5¶KbrdHook 2.2.1.4 -Настройки-¶D:\Жека\KbrdHook\KbrdHook.exe¶09.10.2006 20:26:34¶
F6¶~¶~¶09.10.2006 20:26:34¶
Alt¶KbrdHook 2.2.1.4 -Настройки-¶D:\Жека\KbrdHook\KbrdHook.exe¶09.10.2006 20:31:41¶
Print Screen¶~¶~¶09.10.2006 20:31:41¶
Ctrl¶Network Assistant 4.1 - Пятки кита¶C:\Program Files\Network Assistant\Nassi.exe¶09.10.2006 20:31:46¶
Ctrl+м¶~¶~¶09.10.2006 20:31:47¶
Ctrl¶ASCII Art [папка]¶E:\Жека\Разное\ASCII Art\¶09.10.2006 20:32:24¶
Ctrl+с¶~¶~¶09.10.2006 20:32:24¶
Ctrl¶Osp [папка]¶D:\Жека\Игры\Quake III\Osp\¶09.10.2006 20:32:29¶
Ctrl+м¶~¶~¶09.10.2006 20:32:30¶
Del¶~¶~¶09.10.2006 20:32:32¶
Enter¶Подтверждение удаления группы файлов¶C:\WINDOWS\Explorer.EXE¶09.10.2006 20:32:33¶

Т.е. это что-то типо таблицы. Разделителем между столбцами служит символ ¶ (182). Если во втором или третьем столбце стоит символ ~, это значит, что значения этих столбцов нужно брать из предыдущей строки (т.е. они повторяются). К примеру:

Ctrl¶Osp [папка]¶D:\Жека\Игры\Quake III\Osp\¶09.10.2006 20:32:29¶
Ctrl+м¶~¶~¶09.10.2006 20:32:30¶
Del¶~¶~¶09.10.2006 20:32:32¶

Это одно и то же что и:

Ctrl¶Osp [папка]¶D:\Жека\Игры\Quake III\Osp\¶09.10.2006 20:32:29¶
Ctrl+м¶Osp [папка]¶D:\Жека\Игры\Quake III\Osp\¶09.10.2006 20:32:30¶
Del¶Osp [папка]¶D:\Жека\Игры\Quake III\Osp\¶09.10.2006 20:32:32¶

Требуется алгоритм, который считывает этот файл в ListView (типа Report, таблица с 4 столбцами). Для этого я [more=использую вот этот алгоритм]
procedure loadlog(path: string);
var
LI:TListItem;
fil: textfile;
a: char;
i,k: integer;
za,pa,s1,s2,s3,s4: string;
begin
Form1.ListView1.Clear;
assignfile(fil,path);
reset(fil);
i:=0;
k:=0;
repeat
repeat
case i of
0: begin
read(fil,a);
if a=chr(182) then i:=i+1 else begin
s1 := s1 + a; end; end;
1: begin
read(fil,a);
if a=chr(182) then i:=i+1 else
s2 := s2 + a;
if (s2='~') then
s2:=za else za:=s2;
end;
2: begin
read(fil,a);
if a=chr(182) then i:=i+1 else
s3 := s3 + a;
if (s3='~') then
s3:=pa else pa:=s3;
end;
3: begin
read(fil,a);
if a=chr(182) then i:=i+1 else
s4 := s4 + a;
end; end;
until (eoln(fil)) or (i=4);
k:=k+1;
LI:=Form1.ListView1.Items.Add;
LI.Caption:=s1;
LI.SubItems.Add(s2);
LI.SubItems.Add(s3);
LI.SubItems.Add(s4);
readln(fil);
i:=0; s1:=''; s2:=''; s3:=''; s4:='';
until (eof(fil)) or (k>=65535);
closefile(fil);
end;
[/more]

Но проблема в том, что этот алгоритм работает не так быстро, как хотелось бы (при довольно большом файле). Прошу помочь оптимизировать его.
Автор: RomanTim
Дата сообщения: 19.10.2006 10:25
Jokerjar
Сначала надо бы определить что конкретно тормозит - сам разбор файла или заполнение ListView. Убери добавление итемов и посмотри как поменяется время - скорее всего станет намного быстрее. В этом случае помогает процесс заполнения завернуть в TListView.Items.BeginUpdate - TListView.Items.EndUpdate
Автор: Jokerjar
Дата сообщения: 19.10.2006 11:02
RomanTim, а мне кажется, что проблема в том, что файл читается по одному символу. Только вот ничего другого пока не приходит в голову
Автор: RomanTim
Дата сообщения: 19.10.2006 11:18
Jokerjar
Ты попробуй - что TTreeView, что TListView очень сильно тормозят при добавлении большого количества элементов без Begin/EndUpdate.
Чтобы не читать посимвольно можно сразу прочитать файл в TStringList и по нему уже бегать
Автор: ArtemiyUO
Дата сообщения: 19.10.2006 13:31
Jokerjar
Ну конечно читать файл по 1 байту не оптимально. Читайте в поток (стрим), либо в массив (блокреад), либо просто стринговую переменную, а потом работайте с массивом(потоком) так же как и с файлом, хоть по 1 байту.
Автор: vserd
Дата сообщения: 19.10.2006 13:46
cryptonium

Цитата:
скажите а кто-нибудь применяет в своих проектах DUnit?

Кто нибудь применяет....
Каков вопрос, таков ответ.... :(((

Добавлено:
Erazer
проверь и установи %temp% в путь без пробелов.
Автор: Z MeZe
Дата сообщения: 19.10.2006 13:58
Если вот так (читать строками):
[more]
...
var:
StrListBuf: TStringList;
StrBuf: string;
...
begin
...
while not eof(SourceF) do begin
Readln(SourceF, StrBuf);
StrListBuf:=TStringList.Create;
StrListBuf.Text:=StringReplace(StrBuf,'¶',#13#10,[rfReplaceAll]);
if StrListBuf.Text <> ''
then // Далее у нас есть StrListBuf.Strings[0], StrListBuf.Strings[1] ...
{Здесь делай все что угодно,}
StrListBuf.Free;
end;
[/more]
думаю, будет гораздо быстрее
Автор: greenpc
Дата сообщения: 19.10.2006 14:01
Jokerjar
TMS компоненты (TAdvListView) или
попробуй оптимизировать вот этот код
[more]
var
Key1, Key2, Key3, Key4: string;
KeyDef1, KeyDef2, KeyDef3, KeyDef4: string;
TmpStr: string;
i: Integer;
SL1: TStringList;
begin
SL1 := TStringList.Create;
SL1.LoadFromFile('1.log');
KeyDef1 := ''; KeyDef2 := ''; KeyDef3 := ''; KeyDef4 := '';
for i := 0 to SL1.Count - 1 do begin
TmpStr := SL1.Strings[i];
Key1 := Copy(TmpStr, 1, Pos(Chr(182),TmpStr)-1);
Delete(TmpStr, 1, Pos(Chr(182),TmpStr));
if Key1='~' then Key1 := KeyDef1 else KeyDef1 := Key1;
Key2 := Copy(TmpStr, 1, Pos(Chr(182),TmpStr)-1);
Delete(TmpStr, 1, Pos(Chr(182),TmpStr));
if Key2='~' then Key2 := KeyDef2 else KeyDef2 := Key2;
Key3 := Copy(TmpStr, 1, Pos(Chr(182),TmpStr)-1);
Delete(TmpStr, 1, Pos(Chr(182),TmpStr));
if Key3='~' then Key3 := KeyDef3 else KeyDef3 := Key3;
Key4 := Copy(TmpStr, 1, Pos(Chr(182),TmpStr)-1);
Delete(TmpStr, 1, Pos(Chr(182),TmpStr));
if Key4='~' then Key4 := KeyDef4 else KeyDef4 := Key4;

LI:=Form1.ListView1.Items.Add;
LI.Caption:=Key1;
LI.SubItems.Add(Key2);
LI.SubItems.Add(Key3);
LI.SubItems.Add(Key4);
end; // for
FreeAndNil(SL1);

end;
[/more]
Автор: Vitus_Bering
Дата сообщения: 19.10.2006 14:45
Нужно сделать файл справки желательно в формате .chm. Посоветуйте, пож-та, какую-нубудь прогу, чтобы быстро и удобно это сделать.
Автор: yuish
Дата сообщения: 19.10.2006 14:54
Vitus_Bering
на мой взгляд лучшая для создания любых хелпов.
прекрасно интегрируется с проектами на дельфи и си
Help & Manual
ххтп://www.helpandmanual.com/index.html
Автор: Jokerjar
Дата сообщения: 19.10.2006 15:06
Vitus_Bering, пользуюсь HTML Help WorkShop и очень доволен
Автор: RomanTim
Дата сообщения: 19.10.2006 16:10
greenpc

Цитата:
TMS компоненты (TAdvListView)

TMS-овский ListView не поможет - по скорости работы практически один в один (даже чуть медленнее - добавление 10000 итемов на 0.3с)

Jokerjar
Похоже узкое место - само использование TListView. Тупое добавление в цикле тех же 10000 итемов по 3 сабитема на каждый занимает около 7,5с, а если делать Begin/EndUpdate - около 6. Причем зависимость времени от количества хуже чем линейная, на твоих предельных 65535 будет совсем мрачно.

Возможно более шустрым вариантом будет разбор файла во внутренний список и затем отображение его, например, в TAdvStringGrid (только не сразу заполняя, а через OnGetCellText - только видимые ячейки) или в какой-нибудь MemoryDataSet и DBGrid
Автор: Erazer
Дата сообщения: 19.10.2006 16:38
vserd
Слава тебе о ВЕЛИКИЙ ШАМАН всегда и везде я менял %temp% на d:\temp а тут забыл голова садовая... как только поменял и перегрузил комп все так сразу и поставилось. Еще раз благодарю.
ЗЫ на буржуйских форумах тема подымалась не раз но нигде ни одного вразумительного ответа про TEMP никто не написал, не буду и я писать - в лом
Автор: OrlangurStep
Дата сообщения: 19.10.2006 20:42
Обязательно в конце процедуры очищать созданные указатели?
Автор: Larry
Дата сообщения: 19.10.2006 20:51
OrlangurStep, ну никто не убьет, если не очистишь.

Vitus_Bering, берешь любой редактор html и создаешь хелп в формате html, а потом конвертируешь его в chm программой htm2chm.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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