Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизО провилах хорошего тона в программировании. Найти похожие ветки
← →
Rouse_ © (2004-04-07 13:23) [80]> [78] Alex Konshin © (07.04.04 13:19)
Ну так я ж не вникал - просто указал на излишнюю захламленность кода, которую обычно убираю при помощи with...
← →
Rouse_ © (2004-04-07 13:23) [80]> [78] Alex Konshin © (07.04.04 13:19)
Ну так я ж не вникал - просто указал на излишнюю захламленность кода, которую обычно убираю при помощи with...
← →
SoftX (2004-04-07 13:28) [81]>>Agent13 © (07.04.04 12:53) [60]
>>Присоединяюсь. Здесь на форуме мастера очень часто критикуют чей-то код, а примера как НАДО писать я так и не видел. Очень хотелось бы посмотреть.
Ну мне в принципе была полезна критика именно моего кода, и его недостатков, так как часто я ориентируюсь на скорость работы и функциональность, а не на красивость исходников. Теперь буду стараться учесть и это. Я думаю, что мастера тоже код не очень хорошо пишут, иногда, думаю, жертвуют функциональности за счет красивости...
← →
SoftX (2004-04-07 13:28) [81]>>Agent13 © (07.04.04 12:53) [60]
>>Присоединяюсь. Здесь на форуме мастера очень часто критикуют чей-то код, а примера как НАДО писать я так и не видел. Очень хотелось бы посмотреть.
Ну мне в принципе была полезна критика именно моего кода, и его недостатков, так как часто я ориентируюсь на скорость работы и функциональность, а не на красивость исходников. Теперь буду стараться учесть и это. Я думаю, что мастера тоже код не очень хорошо пишут, иногда, думаю, жертвуют функциональности за счет красивости...
← →
}|{yk © (2004-04-07 13:30) [82]А я код вообще не форматирую. Для этого в Delphi есть DelForEx,
для оракловских скриптов - в SQL Navigator Source Formatter
Получается правильное и красивое оформление. А если ктото чскажет что лучше ручками форматировать, то это будет бред - зачем будучи программистом не упрощать себе жизнь?
← →
}|{yk © (2004-04-07 13:30) [82]А я код вообще не форматирую. Для этого в Delphi есть DelForEx,
для оракловских скриптов - в SQL Navigator Source Formatter
Получается правильное и красивое оформление. А если ктото чскажет что лучше ручками форматировать, то это будет бред - зачем будучи программистом не упрощать себе жизнь?
← →
Dmitriy O. © (2004-04-07 13:32) [83]
> SoftX (07.04.04 12:06)
http://dmitriyo.narod.ru/Skrin/kod.jpg
Да такой код трудно понять :))))
← →
Dmitriy O. © (2004-04-07 13:32) [83]
> SoftX (07.04.04 12:06)
http://dmitriyo.narod.ru/Skrin/kod.jpg
Да такой код трудно понять :))))
← →
Alex Konshin © (2004-04-07 13:34) [84]Ты не учитываешь
а) стоимость поддержки твоего кода (а все время, "съэкономленное" тобой будет просто ничто, по сравнению с тем, сколько ты сам или другие люди потратят на разбор твоего кода).
б) стиль позволяет избегать ошибок и упрощает отладку. Я, собственно, тебе указал именно на эти недостатки.
← →
Alex Konshin © (2004-04-07 13:34) [84]Ты не учитываешь
а) стоимость поддержки твоего кода (а все время, "съэкономленное" тобой будет просто ничто, по сравнению с тем, сколько ты сам или другие люди потратят на разбор твоего кода).
б) стиль позволяет избегать ошибок и упрощает отладку. Я, собственно, тебе указал именно на эти недостатки.
← →
DiamondShark © (2004-04-07 13:34) [85]
if (found=True) then with UserInfo, MainData.UserQuery do
begin
LOGIN := FieldByName("LOGIN").AsString;
USERNAME := FieldByName("USERNAME").AsString;
CANDELETEFAX := FieldByName("CANDELETEFAX").AsInteger;
IMMORTAL := FieldByName("IMMORTAL").AsInteger;
CANGETFAX := FieldByName("CANGETFAX").AsInteger;
ADMINISTRATOR := FieldByName("ADMINISTRATOR").AsInteger;
//
ReadCarrentSid := True;
end
ЗЫ
Var Username:String;
var CUsername:longword;
Var TSid,Sid:PSID;
var Csid:longword;
var Domain:String;
Var Cdomain:longword;
Var PUse:SID_NAME_USE;
Var BlobStream:TStream;
var i:integer;
var found:boolean;
if (found=True)
Тяжёлое наследие жабы?
← →
DiamondShark © (2004-04-07 13:34) [85]
if (found=True) then with UserInfo, MainData.UserQuery do
begin
LOGIN := FieldByName("LOGIN").AsString;
USERNAME := FieldByName("USERNAME").AsString;
CANDELETEFAX := FieldByName("CANDELETEFAX").AsInteger;
IMMORTAL := FieldByName("IMMORTAL").AsInteger;
CANGETFAX := FieldByName("CANGETFAX").AsInteger;
ADMINISTRATOR := FieldByName("ADMINISTRATOR").AsInteger;
//
ReadCarrentSid := True;
end
ЗЫ
Var Username:String;
var CUsername:longword;
Var TSid,Sid:PSID;
var Csid:longword;
var Domain:String;
Var Cdomain:longword;
Var PUse:SID_NAME_USE;
Var BlobStream:TStream;
var i:integer;
var found:boolean;
if (found=True)
Тяжёлое наследие жабы?
← →
Внук © (2004-04-07 13:36) [86]>>Rouse_ © (07.04.04 13:23) [80]
А я вот за использование with кроме самых простейших случаев караю расстрелом через повешение. О чем, впрочем, неоднократно говорил, переубедить ни у кого не получилось.
← →
Внук © (2004-04-07 13:36) [86]>>Rouse_ © (07.04.04 13:23) [80]
А я вот за использование with кроме самых простейших случаев караю расстрелом через повешение. О чем, впрочем, неоднократно говорил, переубедить ни у кого не получилось.
← →
}|{yk © (2004-04-07 13:37) [87]Игорю Шевченко:
посмотрел вашу программу "СуперМаркет"
Скажите, а зачем вам было изобретать велосипед?
Есть же специальные языки и среды для моделирования таких процессов. GPSS например.
← →
}|{yk © (2004-04-07 13:37) [87]Игорю Шевченко:
посмотрел вашу программу "СуперМаркет"
Скажите, а зачем вам было изобретать велосипед?
Есть же специальные языки и среды для моделирования таких процессов. GPSS например.
← →
sniknik © (2004-04-07 13:39) [88]хотите посмотреть на действительно ужастный код? или форматирование это как сказать. посмотрите этот, и все ваши претензии покажутся детским лепетом. ;о))
http://delphi.chertenok.ru/forum/my_download.php?tema=del&action=show&id=172
а мне приходилось его еще и разбирать. ;о) (там глюк был, возможно не один но мне хватило. про глюк в ридми написано)
← →
sniknik © (2004-04-07 13:39) [88]хотите посмотреть на действительно ужастный код? или форматирование это как сказать. посмотрите этот, и все ваши претензии покажутся детским лепетом. ;о))
http://delphi.chertenok.ru/forum/my_download.php?tema=del&action=show&id=172
а мне приходилось его еще и разбирать. ;о) (там глюк был, возможно не один но мне хватило. про глюк в ридми написано)
← →
Игорь Шевченко © (2004-04-07 13:49) [89]}|{yk © (07.04.04 13:37)
1) Вопрос к Джеффри Рихтеру (это его пример, переведенный мной на Delphi)
2) Иллюстрация работы с объектами синхронизации в многопоточном приложении
← →
Игорь Шевченко © (2004-04-07 13:49) [89]}|{yk © (07.04.04 13:37)
1) Вопрос к Джеффри Рихтеру (это его пример, переведенный мной на Delphi)
2) Иллюстрация работы с объектами синхронизации в многопоточном приложении
← →
passlight © (2004-04-07 13:56) [90]DiamondShark © (07.04.04 13:34) [85]
Похоже на VBA...
← →
passlight © (2004-04-07 13:56) [90]DiamondShark © (07.04.04 13:34) [85]
Похоже на VBA...
← →
Romkin © (2004-04-07 13:59) [91]Внук © (07.04.04 13:36) [86]
ну-ну
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
...
end;
И не убедишь ты меня, что with - это плохо. Конструкция есть в языке, следовательно - пользуем :)
Единственная причина непользования - неудобно просматривать при отладке? Но у меня пошаговая отладка с просмотром переменных самый крайний случай. Обычно хватает пары точек останова, ну и Ctrl+Alt+W :)
sniknik © (07.04.04 13:39) [88] ААААА!!! :)))
← →
Romkin © (2004-04-07 13:59) [91]Внук © (07.04.04 13:36) [86]
ну-ну
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
...
end;
И не убедишь ты меня, что with - это плохо. Конструкция есть в языке, следовательно - пользуем :)
Единственная причина непользования - неудобно просматривать при отладке? Но у меня пошаговая отладка с просмотром переменных самый крайний случай. Обычно хватает пары точек останова, ну и Ctrl+Alt+W :)
sniknik © (07.04.04 13:39) [88] ААААА!!! :)))
← →
Rouse_ © (2004-04-07 14:01) [92]> [86] Внук © (07.04.04 13:36)
Не в моих правилах кого-то разубеждать.
к примеру не буду я писать везде IP.<параметр>
вместоwith IP do
begin
Ttl := 1;
Tos := 0;
IPFlags := 0;
OptSize := 0;
Options := nil;
end;
Полностью все окаймлять в функции - тут тоже смотря какая функция.
Обычно я это делаю когда нет неоднозначности выполнения кода...
← →
Rouse_ © (2004-04-07 14:01) [92]> [86] Внук © (07.04.04 13:36)
Не в моих правилах кого-то разубеждать.
к примеру не буду я писать везде IP.<параметр>
вместоwith IP do
begin
Ttl := 1;
Tos := 0;
IPFlags := 0;
OptSize := 0;
Options := nil;
end;
Полностью все окаймлять в функции - тут тоже смотря какая функция.
Обычно я это делаю когда нет неоднозначности выполнения кода...
← →
SoftX (2004-04-07 14:02) [93]>>DiamondShark © (07.04.04 13:34) [85]
>>Тяжёлое наследие жабы?
Вообще-то я писал и на Жабе и на C++ и на Ada и на Асме и на Прологе..., так что после изучения довольно немалого количества языков у меня сформировался свой стиль, возможно кривой, но мне все равно на чем писать(только FoxPro ненавижу). В принципе многим более непонятна логика моей программы, чем код. Так как многие вещи я реализую(для ускорения) так как обычный программист делать не стал бы, но в каждом данном случае это является более целесообразным, чем нормальный подход. Хоть это и затрудняет удобочитаемость кода, код ориентирован на одного человека...
← →
SoftX (2004-04-07 14:02) [93]>>DiamondShark © (07.04.04 13:34) [85]
>>Тяжёлое наследие жабы?
Вообще-то я писал и на Жабе и на C++ и на Ada и на Асме и на Прологе..., так что после изучения довольно немалого количества языков у меня сформировался свой стиль, возможно кривой, но мне все равно на чем писать(только FoxPro ненавижу). В принципе многим более непонятна логика моей программы, чем код. Так как многие вещи я реализую(для ускорения) так как обычный программист делать не стал бы, но в каждом данном случае это является более целесообразным, чем нормальный подход. Хоть это и затрудняет удобочитаемость кода, код ориентирован на одного человека...
← →
Rouse_ © (2004-04-07 14:06) [94]> [88] sniknik © (07.04.04 13:39)
Тебе только за попытку разобраться в ЭТОМ (боюсь назвать коде) нужно давать орден Героя Соц Труда, и Красную Звезду на все пузо :)))))
← →
Rouse_ © (2004-04-07 14:06) [94]> [88] sniknik © (07.04.04 13:39)
Тебе только за попытку разобраться в ЭТОМ (боюсь назвать коде) нужно давать орден Героя Соц Труда, и Красную Звезду на все пузо :)))))
← →
Игорь Шевченко © (2004-04-07 14:10) [95]
> код ориентирован на одного человека...
Это и есть показатель неудобочитаемого кода. При увольнении, допустим, этого человека, его код с большой долей вероятности придется переписывать, если потребуется в нем что-либо исправлять или дополнять.
← →
Игорь Шевченко © (2004-04-07 14:10) [95]
> код ориентирован на одного человека...
Это и есть показатель неудобочитаемого кода. При увольнении, допустим, этого человека, его код с большой долей вероятности придется переписывать, если потребуется в нем что-либо исправлять или дополнять.
← →
Romkin © (2004-04-07 14:16) [96]Кстати, а ведь неплохой вопрос...
имеем:
type
TCustomFrameShowAnswer = class(TFrame)
...
end;
TFrameShowText = class(TCustomFrameShowAnswer)
...
public
constructor Create(AOwner: TComponent); override;
...
end;
Вызов
FrameClassName := "TFrameShowText";
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
...
end;
Вопрос: конструктор Create какого класса будет вызван?
← →
Romkin © (2004-04-07 14:16) [96]Кстати, а ведь неплохой вопрос...
имеем:
type
TCustomFrameShowAnswer = class(TFrame)
...
end;
TFrameShowText = class(TCustomFrameShowAnswer)
...
public
constructor Create(AOwner: TComponent); override;
...
end;
Вызов
FrameClassName := "TFrameShowText";
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
...
end;
Вопрос: конструктор Create какого класса будет вызван?
← →
mfender © (2004-04-07 14:19) [97]panov © (07.04.04 12:37)
>mfender © (07.04.04 12:23) [38]
хотя бы тот же банальный 2 пробела перед begin
2 пробела не перед begin вставляются, а в строке, следующей после begin:
А вот я обычно пишу так:function MyFuncDelta: Boolean;
begin
if a>b then
begin
Result := a - b;
end
else
begin
Result := b - a;
end;
end;
Я не прав?
← →
mfender © (2004-04-07 14:19) [97]panov © (07.04.04 12:37)
>mfender © (07.04.04 12:23) [38]
хотя бы тот же банальный 2 пробела перед begin
2 пробела не перед begin вставляются, а в строке, следующей после begin:
А вот я обычно пишу так:function MyFuncDelta: Boolean;
begin
if a>b then
begin
Result := a - b;
end
else
begin
Result := b - a;
end;
end;
Я не прав?
← →
Внук © (2004-04-07 14:20) [98]>>Romkin © (07.04.04 13:59) [91]
Попробую изложить свои соображения. Чтение такого кода подразумевает знание структуры используемых (иногда - специфических) VCL-классов. Что не является обязательным для чтения этого кода другим человеком (не автором), не говоря уже о собственноручно написанных классах. Поиск на всякий случай наличие в проекте глобальных переменных Parent и Align тоже не добавляет положительных эмоций. Не говоря уже о том, когда with применяется для нескольких объектов или вложенный with.
Оператор goto тоже есть в языке, так и что?
Когда сам начинал писать на С++, долго ругался по поводу отсутствия там with (до этого на TP7.0 писал). А потом понял всю прелесть, когда пришлось разбираться в сотнях килобайт чужого кода.
Перешел на Delphi - теперь для меня with не существует.
← →
Внук © (2004-04-07 14:20) [98]>>Romkin © (07.04.04 13:59) [91]
Попробую изложить свои соображения. Чтение такого кода подразумевает знание структуры используемых (иногда - специфических) VCL-классов. Что не является обязательным для чтения этого кода другим человеком (не автором), не говоря уже о собственноручно написанных классах. Поиск на всякий случай наличие в проекте глобальных переменных Parent и Align тоже не добавляет положительных эмоций. Не говоря уже о том, когда with применяется для нескольких объектов или вложенный with.
Оператор goto тоже есть в языке, так и что?
Когда сам начинал писать на С++, долго ругался по поводу отсутствия там with (до этого на TP7.0 писал). А потом понял всю прелесть, когда пришлось разбираться в сотнях килобайт чужого кода.
Перешел на Delphi - теперь для меня with не существует.
← →
Игорь Шевченко © (2004-04-07 14:20) [99]
> конструктор Create какого класса будет вызван?
TFrameShowText - он же виртуальный
← →
Игорь Шевченко © (2004-04-07 14:20) [99]
> конструктор Create какого класса будет вызван?
TFrameShowText - он же виртуальный
← →
olookin © (2004-04-07 14:21) [100][32] Игорь Шевченко © (07.04.04 12:09)
SoftX (07.04.04 12:06)
> говорят тяжелый,
Справедливо говорят.
А про это что скажете?
procedure TEQAPbase.EqapAllsizediagram1Click(Sender: TObject);
var Form: TForm;
Chart: TChart;
dataser,trendser: TLineSeries;
i,j,n: integer;
str: array of string;
a,s: string;
lst: TStringList;
curdate: TDate;
vals: TIntegerArray;
p: PChar;
m: TDoubleArray;
pm: PDoubleArray;
psource,pdest: PChartSeries;
source,dest: TChartSeries;
begin
Form:=TForm.Create(Application);
with Form do begin Caption:="EqapAll execution file size diagram";
BorderIcons:=[biSystemMenu]; BorderStyle:=bsSingle;
Width:=500; Height:=200; Position:=poScreenCenter; end;
Chart:=TChart.Create(Form);
with Chart do begin Parent:=Form; Align:=alClient;
MarginTop:=3; MarginBottom:=1; MarginLeft:=1; MarginRight:=3;
View3D:=false; BevelInner:=bvNone; BevelOuter:=bvNone;
Title.Visible:=false; Legend.Visible:=false;
BackWall.Brush.Style:=bsSolid; BackWall.Color:=clWhite;
with LeftAxis do begin LabelsFont.Size:=6; Grid.Visible:=false;
Title.Caption:="Size, kB"; Title.Font.Size:=6; BorderWidth:=2; end;
with BottomAxis do begin LabelsFont.Size:=6; Grid.Visible:=false;
Title.Caption:="Date"; Title.Font.Size:=6;
DateTimeFormat:="dd.MM.yyyy"; end;
dataser:=TLineSeries.Create(Chart);
with dataser do begin ParentChart:=Chart;
XValues.DateTime:=true; SeriesColor:=clRed; LinePen.Width:=2;
with Pointer do begin Visible:=true; Style:=psCircle;
VertSize:=3; HorizSize:=3; Brush.Color:=clRed;
Pen.Color:=clBlack; end; end;
trendser:=TLineSeries.Create(Chart);
with trendser do begin ParentChart:=Chart; XValues.DateTime:=true;
SeriesColor:=clBlack; LinePen.Width:=2; end; end;
for i:=0 to Chart.SeriesCount-1 do Chart.Series[i].Clear;
if FileExists(dir+"\System\SizeDiagram.eqs") then begin
i:=0; curdate:=0; lst:=TStringList.Create;
lst.LoadFromFile(dir+"\System\SizeDiagram.eqs");
for j:=0 to lst.Count-1 do begin a:=lst.Strings[j];
s:=Copy(a,1,Pos("=",a)-1); n:=StrToInt(Copy(a,Pos("=",a)+1,Length(a)));
if StrToDate(s)<>curdate then begin SetLength(vals,i+1); vals[i]:=n;
Chart.Series[0].AddXY(StrToDate(s),trunc(vals[i]/1000));
SetLength(str,i+1); str[i]:=a; curdate:=StrToDate(s); Inc(i); end else
str[i-1]:=a; end; lst.Clear;
for i:=0 to Length(str)-1 do lst.Add(str[i]);
lst.SaveToFile(dir+"\System\SizeDiagram.eqs");
pm:=@m; source:=TChartSeries.Create(nil); source.Assign(dataser);
dest:=TChartSeries.Create(nil); dest.Assign(trendser);
psource:=@source; pdest:=@dest;
PolynomialRegression(nil,nil,psource,pdest,3,pm,clBlack,p);
trendser.Assign(dest); m:=nil; pm:=nil;
psource:=nil; source.Free; pdest:=nil; dest.Free;
ChartMinMax(Chart); end; vals:=nil; str:=nil; Form.ShowModal;
dataser.Clear; dataser.Free; trendser.Clear; trendser.Free;
Chart.FreeAllSeries; Chart.Destroy; Form.Destroy; lst.Clear; lst.Free;
end;
PS: я жуть как не люблю длинные листинги - мне нравится когда все перед глазами. Распишите представленное выше по правилам оформления кода, и у вас получится страниц 10 в доковском документе, размер шрифта 12.
← →
olookin © (2004-04-07 14:21) [100][32] Игорь Шевченко © (07.04.04 12:09)
SoftX (07.04.04 12:06)
> говорят тяжелый,
Справедливо говорят.
А про это что скажете?
procedure TEQAPbase.EqapAllsizediagram1Click(Sender: TObject);
var Form: TForm;
Chart: TChart;
dataser,trendser: TLineSeries;
i,j,n: integer;
str: array of string;
a,s: string;
lst: TStringList;
curdate: TDate;
vals: TIntegerArray;
p: PChar;
m: TDoubleArray;
pm: PDoubleArray;
psource,pdest: PChartSeries;
source,dest: TChartSeries;
begin
Form:=TForm.Create(Application);
with Form do begin Caption:="EqapAll execution file size diagram";
BorderIcons:=[biSystemMenu]; BorderStyle:=bsSingle;
Width:=500; Height:=200; Position:=poScreenCenter; end;
Chart:=TChart.Create(Form);
with Chart do begin Parent:=Form; Align:=alClient;
MarginTop:=3; MarginBottom:=1; MarginLeft:=1; MarginRight:=3;
View3D:=false; BevelInner:=bvNone; BevelOuter:=bvNone;
Title.Visible:=false; Legend.Visible:=false;
BackWall.Brush.Style:=bsSolid; BackWall.Color:=clWhite;
with LeftAxis do begin LabelsFont.Size:=6; Grid.Visible:=false;
Title.Caption:="Size, kB"; Title.Font.Size:=6; BorderWidth:=2; end;
with BottomAxis do begin LabelsFont.Size:=6; Grid.Visible:=false;
Title.Caption:="Date"; Title.Font.Size:=6;
DateTimeFormat:="dd.MM.yyyy"; end;
dataser:=TLineSeries.Create(Chart);
with dataser do begin ParentChart:=Chart;
XValues.DateTime:=true; SeriesColor:=clRed; LinePen.Width:=2;
with Pointer do begin Visible:=true; Style:=psCircle;
VertSize:=3; HorizSize:=3; Brush.Color:=clRed;
Pen.Color:=clBlack; end; end;
trendser:=TLineSeries.Create(Chart);
with trendser do begin ParentChart:=Chart; XValues.DateTime:=true;
SeriesColor:=clBlack; LinePen.Width:=2; end; end;
for i:=0 to Chart.SeriesCount-1 do Chart.Series[i].Clear;
if FileExists(dir+"\System\SizeDiagram.eqs") then begin
i:=0; curdate:=0; lst:=TStringList.Create;
lst.LoadFromFile(dir+"\System\SizeDiagram.eqs");
for j:=0 to lst.Count-1 do begin a:=lst.Strings[j];
s:=Copy(a,1,Pos("=",a)-1); n:=StrToInt(Copy(a,Pos("=",a)+1,Length(a)));
if StrToDate(s)<>curdate then begin SetLength(vals,i+1); vals[i]:=n;
Chart.Series[0].AddXY(StrToDate(s),trunc(vals[i]/1000));
SetLength(str,i+1); str[i]:=a; curdate:=StrToDate(s); Inc(i); end else
str[i-1]:=a; end; lst.Clear;
for i:=0 to Length(str)-1 do lst.Add(str[i]);
lst.SaveToFile(dir+"\System\SizeDiagram.eqs");
pm:=@m; source:=TChartSeries.Create(nil); source.Assign(dataser);
dest:=TChartSeries.Create(nil); dest.Assign(trendser);
psource:=@source; pdest:=@dest;
PolynomialRegression(nil,nil,psource,pdest,3,pm,clBlack,p);
trendser.Assign(dest); m:=nil; pm:=nil;
psource:=nil; source.Free; pdest:=nil; dest.Free;
ChartMinMax(Chart); end; vals:=nil; str:=nil; Form.ShowModal;
dataser.Clear; dataser.Free; trendser.Clear; trendser.Free;
Chart.FreeAllSeries; Chart.Destroy; Form.Destroy; lst.Clear; lst.Free;
end;
PS: я жуть как не люблю длинные листинги - мне нравится когда все перед глазами. Распишите представленное выше по правилам оформления кода, и у вас получится страниц 10 в доковском документе, размер шрифта 12.
← →
Игорь Шевченко © (2004-04-07 14:23) [101]olookin © (07.04.04 14:21)
Его нельзя прочитать.
← →
Игорь Шевченко © (2004-04-07 14:23) [101]olookin © (07.04.04 14:21)
Его нельзя прочитать.
← →
Style © (2004-04-07 14:26) [102][100]
Мдя...
А теперь пощитайте время на его прочтение до полного осознания что там происходит :)
А отладчик вы вообще не используете???
Или к такому виду исходник приводят после отладки :)
← →
Style © (2004-04-07 14:26) [102][100]
Мдя...
А теперь пощитайте время на его прочтение до полного осознания что там происходит :)
А отладчик вы вообще не используете???
Или к такому виду исходник приводят после отладки :)
← →
Romkin © (2004-04-07 14:27) [103]Внук © (07.04.04 14:20) [98] Ты, эда, не усугубливай :))) Все дело в культуре: уверяю, в моем коде ты можешь быть уверен, что засады нет, переменные в блоке with либо принадлежат этому объекту, либо локальные данного метода (очень редко на F - приватные). Все.
Иначе ты увидишь полную расшифровку... Полностью там написано:
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
ShowAnswers(DMTasks.cdsQuestion.FieldByName("QUEST_KIND").asString);
end;
Неужели код плох для чтения?
← →
Romkin © (2004-04-07 14:27) [103]Внук © (07.04.04 14:20) [98] Ты, эда, не усугубливай :))) Все дело в культуре: уверяю, в моем коде ты можешь быть уверен, что засады нет, переменные в блоке with либо принадлежат этому объекту, либо локальные данного метода (очень редко на F - приватные). Все.
Иначе ты увидишь полную расшифровку... Полностью там написано:
with TCustomFrameShowAnswerClass(FindClass(FrameClassName)).Create(Self) do
begin
Parent := self;
Align := alClient;
ShowAnswers(DMTasks.cdsQuestion.FieldByName("QUEST_KIND").asString);
end;
Неужели код плох для чтения?
← →
Anatoly Podgoretsky © (2004-04-07 14:28) [104]mfender © (07.04.04 14:19) [97]
Право имеешь, но логически как бы добавляешь новые уровни вложенности, там где их нет.
← →
Anatoly Podgoretsky © (2004-04-07 14:28) [104]mfender © (07.04.04 14:19) [97]
Право имеешь, но логически как бы добавляешь новые уровни вложенности, там где их нет.
← →
Style © (2004-04-07 14:31) [105]>>[100]
Form:=TForm.Create(Application);
....
Form.Free;
таже беда где у тя try finally????
← →
Style © (2004-04-07 14:31) [105]>>[100]
Form:=TForm.Create(Application);
....
Form.Free;
таже беда где у тя try finally????
← →
VAleksey © (2004-04-07 14:34) [106]
> olookin © (07.04.04 14:21) [100]
Вот матерится будет тот кому это придется разгребать.
← →
VAleksey © (2004-04-07 14:34) [106]
> olookin © (07.04.04 14:21) [100]
Вот матерится будет тот кому это придется разгребать.
← →
Внук © (2004-04-07 14:34) [107]>>Romkin © (07.04.04 14:27) [103]
Дык, я и говорю - если аккуратно :))) Иначе - расстрел, с занесением в личное дело. А что до меня касается - вообще не применяю такого.
← →
Внук © (2004-04-07 14:34) [107]>>Romkin © (07.04.04 14:27) [103]
Дык, я и говорю - если аккуратно :))) Иначе - расстрел, с занесением в личное дело. А что до меня касается - вообще не применяю такого.
← →
mfender © (2004-04-07 14:35) [108]
> Anatoly Podgoretsky © (07.04.04 14:28) [104]
> mfender © (07.04.04 14:19) [97]
> Право имеешь, но логически как бы добавляешь новые уровни
> вложенности, там где их нет.
Нет, ну приведенный пример, конечно, содержит лишние begin...end, для одного движения я, разумеется, не стану делать блок. Но в целом я так всегда делаю. Просто самому понятней (я - не программист, это мое хобби. Пишу только для себя. Вот последнее творение - админский клиент для сайта, БД обслуживать.) Да, еще когда пишу, обычно сразу пишу begin...end, чтобы потом не было мучительно трудно концы искать.
← →
mfender © (2004-04-07 14:35) [108]
> Anatoly Podgoretsky © (07.04.04 14:28) [104]
> mfender © (07.04.04 14:19) [97]
> Право имеешь, но логически как бы добавляешь новые уровни
> вложенности, там где их нет.
Нет, ну приведенный пример, конечно, содержит лишние begin...end, для одного движения я, разумеется, не стану делать блок. Но в целом я так всегда делаю. Просто самому понятней (я - не программист, это мое хобби. Пишу только для себя. Вот последнее творение - админский клиент для сайта, БД обслуживать.) Да, еще когда пишу, обычно сразу пишу begin...end, чтобы потом не было мучительно трудно концы искать.
← →
Anatoly Podgoretsky © (2004-04-07 14:38) [109]Всегда пишу скобки парой, а begin...end это операторные скобки
Также поступаю и с другими конструкциями, типа try, case и подобное, уменьшает количество ошибок.
← →
Anatoly Podgoretsky © (2004-04-07 14:38) [109]Всегда пишу скобки парой, а begin...end это операторные скобки
Также поступаю и с другими конструкциями, типа try, case и подобное, уменьшает количество ошибок.
← →
Style © (2004-04-07 14:42) [110]Кстати сабж. интересный
О провилах! Или вилы хорошего тона :)
← →
Style © (2004-04-07 14:42) [110]Кстати сабж. интересный
О провилах! Или вилы хорошего тона :)
← →
Anatoly Podgoretsky © (2004-04-07 14:44) [111]Это грабли только плохие бывают, а вилы нет.
← →
Anatoly Podgoretsky © (2004-04-07 14:44) [111]Это грабли только плохие бывают, а вилы нет.
← →
Style © (2004-04-07 14:49) [112]
> Это грабли только плохие бывают, а вилы нет.
А я и написал - вилы хорошего тона!
← →
Style © (2004-04-07 14:49) [112]
> Это грабли только плохие бывают, а вилы нет.
А я и написал - вилы хорошего тона!
← →
Vuk © (2004-04-07 14:53) [113]to olookin © (07.04.04 14:21) [100]:
>А про это что скажете?
Эффект почти как от обфускатора.
← →
Vuk © (2004-04-07 14:53) [113]to olookin © (07.04.04 14:21) [100]:
>А про это что скажете?
Эффект почти как от обфускатора.
← →
panov © (2004-04-07 14:57) [114]>mfender ©
begin...end должны быть на том же уровне по вертикали со строкой с if, do, with и т.п.
← →
panov © (2004-04-07 14:57) [114]>mfender ©
begin...end должны быть на том же уровне по вертикали со строкой с if, do, with и т.п.
← →
Style © (2004-04-07 14:57) [115]Вот я щас на грабли чуть не наступил :)
Всего лишь то забыл в DotReplace result := ""; в
начале функции поставить :)
Дык у меня сейчас такие миллиарды в банк пошли :)
//Экспорт в БОГОРДСК БАНК!
procedure TFrm_Export.Bogorodsk();
var
Str: TStringList;
f,i: integer;
function DotReplace(Str: string):string;
var
i: integer;
begin
for i := 1 to Length(Str) do
begin
if(Str[i] = ",") then
result := result + "."
else
result := result + Str[i];
end;
end;
begin
if(not SaveDialog.Execute) then Exit;
if(FileExists(SaveDialog.FileName)) then
begin
if(MessageBox(Handle,"Файл существует. Заменить?","Сообщение", MB_ICONQUESTION or MB_YESNO) = ID_NO) then
exit
else
deletefile(SaveDialog.FileName);
end;
Str := TStringList.Create();
try
qry_export.Close;
qry_export.ParamByName("DateOper").AsDate := CurrentDate;
qry_export.ParamByName("Flag").AsInteger := 0;
qry_export.ParamByName("BankID").AsFLoat := qry_banklist.FieldByName("BankID").AsFLoat;
OpenQueryWait(nil,qry_export,STATE_OPEN);
qry_export.first();
for i := 1 to qry_export.RecordCount do
begin
Str.Add("#"+IntTOStr(i)+"|PayDocRuXE");
for f := 0 to Qry_Export.Fields.Count-1 do
begin
if(qry_export.fields[f].DataType = ftFloat) then
begin
Str.Add( WinToDos(DotReplace(qry_export.fields[f].AsString)));
end
else
Str.Add( WinToDos(qry_export.fields[f].AsString));
end;
Str.Add(";end");
qry_export.Next();
end;
Str.SaveToFile(SaveDialog.FileName);
ShowMessage("Экспорт успешно завершен!" + CHR($0D) + CHR($0A) + "Экспортировано записей: " + IntToStr(qry_export.RecordCount));
finally
str.Free;
end;
end;
← →
Style © (2004-04-07 14:57) [115]Вот я щас на грабли чуть не наступил :)
Всего лишь то забыл в DotReplace result := ""; в
начале функции поставить :)
Дык у меня сейчас такие миллиарды в банк пошли :)
//Экспорт в БОГОРДСК БАНК!
procedure TFrm_Export.Bogorodsk();
var
Str: TStringList;
f,i: integer;
function DotReplace(Str: string):string;
var
i: integer;
begin
for i := 1 to Length(Str) do
begin
if(Str[i] = ",") then
result := result + "."
else
result := result + Str[i];
end;
end;
begin
if(not SaveDialog.Execute) then Exit;
if(FileExists(SaveDialog.FileName)) then
begin
if(MessageBox(Handle,"Файл существует. Заменить?","Сообщение", MB_ICONQUESTION or MB_YESNO) = ID_NO) then
exit
else
deletefile(SaveDialog.FileName);
end;
Str := TStringList.Create();
try
qry_export.Close;
qry_export.ParamByName("DateOper").AsDate := CurrentDate;
qry_export.ParamByName("Flag").AsInteger := 0;
qry_export.ParamByName("BankID").AsFLoat := qry_banklist.FieldByName("BankID").AsFLoat;
OpenQueryWait(nil,qry_export,STATE_OPEN);
qry_export.first();
for i := 1 to qry_export.RecordCount do
begin
Str.Add("#"+IntTOStr(i)+"|PayDocRuXE");
for f := 0 to Qry_Export.Fields.Count-1 do
begin
if(qry_export.fields[f].DataType = ftFloat) then
begin
Str.Add( WinToDos(DotReplace(qry_export.fields[f].AsString)));
end
else
Str.Add( WinToDos(qry_export.fields[f].AsString));
end;
Str.Add(";end");
qry_export.Next();
end;
Str.SaveToFile(SaveDialog.FileName);
ShowMessage("Экспорт успешно завершен!" + CHR($0D) + CHR($0A) + "Экспортировано записей: " + IntToStr(qry_export.RecordCount));
finally
str.Free;
end;
end;
← →
Dmitriy O. © (2004-04-07 15:00) [116]
> olookin © (07.04.04 14:21)
Да такой код не смогла обработать до конца даже моя AvtoShema.
http://dmitriyo.narod.ru/Skrin/olookin.jpg
← →
Dmitriy O. © (2004-04-07 15:00) [116]
> olookin © (07.04.04 14:21)
Да такой код не смогла обработать до конца даже моя AvtoShema.
http://dmitriyo.narod.ru/Skrin/olookin.jpg
← →
Игорь Шевченко © (2004-04-07 15:10) [117]
> function DotReplace(Str: string):string;
> var
> i: integer;
> begin
> for i := 1 to Length(Str) do
> begin
> if(Str[i] = ",") then
> result := result + "."
> else
> result := result + Str[i];
> end;
>
> end;
>
Result := StringReplace(Str, ",", ".", [rfReplaceAll]);
← →
Игорь Шевченко © (2004-04-07 15:10) [117]
> function DotReplace(Str: string):string;
> var
> i: integer;
> begin
> for i := 1 to Length(Str) do
> begin
> if(Str[i] = ",") then
> result := result + "."
> else
> result := result + Str[i];
> end;
>
> end;
>
Result := StringReplace(Str, ",", ".", [rfReplaceAll]);
← →
Nikolay M. © (2004-04-07 15:11) [118]
> olookin © (07.04.04 14:21) [100]
Ха-ха 3 раза :)
Это все детский сад. Учу, пока я жив:#include
#include
#define m(x)(x#define g tj()-J
#define a(x)(x#define h(x)((x)#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f]; tj(){
U S=m(v)+(m(w)
v?a(v)>1||w-Y||!q[J]:(w-Y (w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/
v?a(v)>2))||q[J];
} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w) (J-W-2||(W N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*YA(R)(rand() PZ)/(R)PZ; } l(){ _=K+1; A(v*w
a(v)-a(w))||g; } R UC(){ R i=0,d;
u((i+=d=VR())J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J N)-(W N); w=(J>>K)-(W>>K); A
q[W]()||(x QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i
B(j>=0 !I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){
V(v=0; v>K)==0){ U S=h(v N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; ii%8||H"\n%4o ",i);
B((Y=P[i]=m(P[i])) TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++ N); u(i N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i
r=h(i>>K)+h(i N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]>K):(i>>K)):
(Z==l?124-((YY>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j++j)B(!I(i,j,0))S+=(P[j]?5:1);
BZ+=G==Y?S:-S; Y=G; } }
B(!(++X M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i>K+K,i M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o", i, j)!=2||I(i,j,1));
O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(KB(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long
B(T>time(),j=time( j);
R i=0; srand((U)j); V(M=0; MV(N=1; N*N1?atoi(av[1]):2; uv(); RZ(); }
Кстати, полностью рабочий код. =))
← →
Nikolay M. © (2004-04-07 15:11) [118]
> olookin © (07.04.04 14:21) [100]
Ха-ха 3 раза :)
Это все детский сад. Учу, пока я жив:#include
#include
#define m(x)(x#define g tj()-J
#define a(x)(x#define h(x)((x)#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f]; tj(){
U S=m(v)+(m(w)
v?a(v)>1||w-Y||!q[J]:(w-Y (w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/
v?a(v)>2))||q[J];
} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w) (J-W-2||(W N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*YA(R)(rand() PZ)/(R)PZ; } l(){ _=K+1; A(v*w
a(v)-a(w))||g; } R UC(){ R i=0,d;
u((i+=d=VR())J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J N)-(W N); w=(J>>K)-(W>>K); A
q[W]()||(x QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i
B(j>=0 !I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){
V(v=0; v>K)==0){ U S=h(v N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; ii%8||H"\n%4o ",i);
B((Y=P[i]=m(P[i])) TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++ N); u(i N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i
r=h(i>>K)+h(i N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]>K):(i>>K)):
(Z==l?124-((YY>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j++j)B(!I(i,j,0))S+=(P[j]?5:1);
BZ+=G==Y?S:-S; Y=G; } }
B(!(++X M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i>K+K,i M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o", i, j)!=2||I(i,j,1));
O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(KB(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long
B(T>time(),j=time( j);
R i=0; srand((U)j); V(M=0; MV(N=1; N*N1?atoi(av[1]):2; uv(); RZ(); }
Кстати, полностью рабочий код. =))
← →
Игорь Шевченко © (2004-04-07 15:11) [119]
> if(not SaveDialog.Execute) then Exit;
>
> if(FileExists(SaveDialog.FileName)) then
> begin
> if(MessageBox(Handle,"Файл существует. Заменить?","Сообщение",
> MB_ICONQUESTION or MB_YESNO) = ID_NO) then
> exit
> else
> deletefile(SaveDialog.FileName);
> end;
SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]
← →
Игорь Шевченко © (2004-04-07 15:11) [119]
> if(not SaveDialog.Execute) then Exit;
>
> if(FileExists(SaveDialog.FileName)) then
> begin
> if(MessageBox(Handle,"Файл существует. Заменить?","Сообщение",
> MB_ICONQUESTION or MB_YESNO) = ID_NO) then
> exit
> else
> deletefile(SaveDialog.FileName);
> end;
SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt]
← →
Игорь Шевченко © (2004-04-07 15:13) [120]Nikolay M. © (07.04.04 15:11)
Suxx. Оцени:/*
* Program to compute an approximation of pi
* by Brian Westley, 1988
* (requires pcc macro concatenation; try gcc -traditional-cpp)
*/
#define _ -F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
← →
Игорь Шевченко © (2004-04-07 15:13) [120]Nikolay M. © (07.04.04 15:11)
Suxx. Оцени:/*
* Program to compute an approximation of pi
* by Brian Westley, 1988
* (requires pcc macro concatenation; try gcc -traditional-cpp)
*/
#define _ -F<00||--F-OO--;
int F=00,OO=00;
main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
Страницы: 1 2 3 4 5 6 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.98 MB
Время: 0.08 c