- 1
- 2
- 3
// ...
if not Length(username) in [6..24] then
raise Exception.Create('Длина ника должна находиться в пределах от 6 до 24 символов');
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+137
// ...
if not Length(username) in [6..24] then
raise Exception.Create('Длина ника должна находиться в пределах от 6 до 24 символов');
ну прям как N ∈[6; 24]
+105
program tetris;
uses
crt;
var
ss,nn,x,y,pus,a,b,c,d,lin,rlin:integer;
st:array[1..12] of array[1..22] of integer;
procedure k(x,y:integer);
{ђЁб㥬 Єў а¤а вЁЄ}
begin
gotoxy(x*2+27,25-y);
if ss=0 then write(' ');
if ss=1 then write('[]');
if ss=2 then write(chr(177),chr(177));
if (ss=3) and (st[x,y]>0) then pus:=1;
if ss=4 then st[x,y]:=1;
gotoxy(1,1);write(' ');
end;
procedure fig(x,y,n,s:integer);
{ђЁб㥬 дЁЈгаг}
begin
if s=3 then pus:=0;
ss:=s; k(x,y);
if n=1 then begin k(x+1,y);k(x,y-1);k(x+1,y-1) end;
if n=2 then begin k(x-1,y);k(x+1,y);k(x+2,y) end;
if n=3 then begin k(x,y+1);k(x,y-1);k(x,y-2) end;
if n=4 then begin k(x+1,y);k(x-1,y);k(x-1,y+1) end;
if n=5 then begin k(x,y+1);k(x+1,y+1);k(x,y-1) end;
if n=6 then begin k(x-1,y);k(x+1,y);k(x+1,y-1) end;
if n=7 then begin k(x,y+1);k(x,y-1);k(x-1,y-1) end;
if n=8 then begin k(x-1,y);k(x+1,y);k(x+1,y+1) end;
if n=9 then begin k(x,y+1);k(x,y-1);k(x+1,y-1) end;
if n=10 then begin k(x+1,y);k(x-1,y);k(x-1,y-1) end;
if n=11 then begin k(x,y+1);k(x,y-1);k(x-1,y+1) end;
if n=12 then begin k(x-1,y);k(x,y-1);k(x+1,y-1) end;
if n=13 then begin k(x,y+1);k(x-1,y);k(x-1,y-1) end;
if n=14 then begin k(x+1,y);k(x-1,y-1);k(x,y-1) end;
if n=15 then begin k(x-1,y);k(x,y-1);k(x-1,y+1) end;
if n=16 then begin k(x+1,y);k(x-1,y);k(x,y+1) end;
if n=17 then begin k(x+1,y);k(x,y+1);k(x,y-1) end;
if n=18 then begin k(x,y-1);k(x-1,y);k(x+1,y) end;
if n=19 then begin k(x-1,y);k(x,y+1);k(x,y-1) end
end;
procedure pov;
{Џ®ў®а®в дЁЈгал}
begin
nn:=nn-1;
if nn=15 then nn:=19;
if nn=13 then nn:=15;
if nn=11 then nn:=13;
if nn=7 then nn:=11;
if nn=3 then nn:=7;
if nn=1 then nn:=3;
if nn=0 then nn:=1;
end;
procedure clrst;
{ЋзЁбвЄ бв Є }
begin
for x:=1 to 12 do
for y:=1 to 22 do
if (x=1) or (x=12) or (y=1) then st[x,y]:=2 else st[x,y]:=0;
end;
procedure risvesst;
{ђЁб®ў вм ўҐбм бв Є }
begin
for x:=1 to 12 do for y:=1 to 22 do
begin
ss:=st[x,y];
k(x,y)
end;
end;
procedure dvig;
{„ўЁ¦ҐЁҐ}
var
i:integer;key:char;
begin
for i:=1 to 10 do
begin
delay(d);
key:=' ';
if keypressed then key:=readkey;
if key='i' then
begin
fig(x-1,y,nn,3);
if pus=0 then begin fig(x,y,nn,0); x:=x-1; fig(x,y,nn,1); end;
end;
http://sources.ru/pascal/gamestxt/tet.htm
+95
// со времен Delphi 7.
procedure TfrmMain.AppDeactivate(Sender: TObject);
begin
OpenClipboard(0);
if (IsClipboardFormatAvailable(CF_TEXT)) then SetClipboardData(CF_LOCALE, 0);
CloseClipboard();
end;
Полагаю, большинство в курсе, что при копировании русского текста из приложения, написанного на дельфи, в другое приложение иногда копируются кракозябры.
Это происходит, когда при копировании НЕ выбрана русская раскладка клавиатуры.
Удалось вылечить так.
+96
WM_KEYDOWN: begin
if GetAsyncKeyState(VK_CONTROL) <> 0 then case W of
integer('X') : SendMessage(H, WM_CUT, 0, 0);
integer('C') : SendMessage(H, WM_COPY, 0, 0);
integer('V') : SendMessage(H, WM_PASTE, 0, 0);
integer('Z') : SendMessage(H, WM_UNDO , 0, 0);
integer('Y') : ReDo(H);
integer('A') : SelectAll(H);
VK_INSERT : SendMessage(H, WM_COPY, 0, 0);
VK_PRIOR : MoveCaretLine (H, -1000000);
VK_NEXT : MoveCaretLine (H, 1000000);
VK_DELETE : SendMessage(H, WM_CLEAR, 0, 0);
// end else if GetAsyncKeyState(VK_ALT) then case W of
// VK_BACK : SendMessage(H, WM_UNDO , 0, 0);
end else if GetAsyncKeyState(VK_SHIFT) <> 0 then case W of
VK_DELETE : SendMessage(H, WM_CUT , 0, 0);
VK_INSERT : SendMessage(H, WM_PASTE, 0, 0);
end else case W of
VK_SHIFT : SDown(H);
VK_LEFT : MoveCaretSymbol (H, -1);
VK_RIGHT : MoveCaretSymbol (H, 1);
VK_UP : MoveCaretLine (H, -1);
VK_DOWN : MoveCaretLine (H, 1);
VK_PRIOR : MoveCaretLine (H, -MaxLinesInScreenByH(H));
VK_NEXT : MoveCaretLine (H, MaxLinesInScreenByH(H));
VK_DELETE : DeleteSymbol(H, False);
end;
DrawText(H);
Exit;
end;
Пишу свой винапи-класс типа Edit.
Так сделаны горячие клавиши.
+87
procedure GenerateMines; // Процедура генерации мин
label
again;
var
t,m:Integer; // Переменные для цикла
i,j:Byte; // Координаты на поле
bufer:String; // Вспомогательная переменная цикла. Хранит текущие сгенерированные координаты мины для записи в массив
begin
Randomize;
for t:= 1 To mines Do
begin
again:
i:=Round(Random*9+1);
j:=Round(Random*9+1);
bufer:=IntToStr(i) + ',' + IntToStr(j); // Создание строковой записи коордитаты мины
for m:= 1 To 100 Do // Цикл для проверки, есть ли сгенерированная координата в массиве
begin
if bufer = mines_a[m] then goto again; // Если сгенерированная координата в массиве есть, то программа генерирует новые координаты
end;
mines_a[t]:=bufer; // Запись новой координаты в массив
field[i,j]:=9; // Добавление мины на поле в сгенерированные координаты
end;
end;
Процедура генерации мин в сапёре. Говно или не?
+89
unit DllUnit; interface
uses windows, sysutils;
Procedure GuPrcA(var p:PAnsiChar;const l:integer); StdCall;
Procedure GuPrcW(var p:PWideChar;const l:integer); StdCall;
Exports GuPrcA,GuPrcW;
implementation
procedure GuMes(s:string);
begin
MessageBox(0,pchar(s),'From dll',mb_iconinformation);
end;
Procedure GuPrcW(var p:PWideChar;const l:integer); // wide
var s:widestring;
begin
if (p=nil)or(l<1) then begin p:=nil;exit;end;
SetLength(s,trunc(l/sizeof(widechar)));Move(p^,Pointer(s)^,l);
gumes('l: '+inttostr(l)+', nl: '+inttostr(length(s))+#10+'-'+s+'-');
s:=widestring(Uppercase(s));Move(Pointer(s)^,p^,l);
end;
Procedure GuPrcA(var p:Pansichar;const l:integer); // ansi
var s:ansistring;
begin
if (p=nil)or(l<1) then begin p:=nil;exit;end;
SetLength(s,l);Move(p^,Pointer(s)^,l);
gumes('l: '+inttostr(l)+', nl: '+inttostr(length(s))+#10+'-'+s+'-');
s:=ansistring(AnsiUppercase(s));Move(Pointer(s)^,p^,l);
end;
Initialization
ReportMemoryLeaksOnShutdown:=true;
end.
(* выше - DLL, ниже импорт из неё *)
...
implementation
{$R *.dfm}
Procedure GuPrcA(var p:PansiChar;const l:cardinal); StdCall; external 'mydll.dll' name 'GuPrcA';
Procedure GuPrcW(var p:PwideChar;const l:cardinal); StdCall; external 'mydll.dll' name 'GuPrcW';
procedure TForm1.Button6Click(Sender: TObject);
var p:pwidechar;c:cardinal;s:widestring;
begin
s:=widestring(memo1.Text);
c:=length(s)*sizeof(widechar);
p:=allocmem(c);
Move(Pointer(s)^,p^,c);
GuPrcW(p,c);
s:='';setlength(s,trunc(c/sizeof(widechar)));
Move(p^,Pointer(s)^,c);
Freemem(p,c);
memo1.Text:='='+s+'= l:'+inttostr(c);
end;
procedure TForm1.Button7Click(Sender: TObject);
var p:pansichar;c:cardinal;s:ansistring;
begin
s:=ansistring(memo1.text);
c:=length(s);
p:=allocmem(c);
Move(Pointer(s)^,p^,c);
GuPrcA(p,c);
s:='';setlength(s,c);
Move(p^,Pointer(s)^,c);
Freemem(p,c);
memo1.Text:='='+s+'= l:'+inttostr(c);
end;
Initialization
ReportMemoryLeaksOnShutdown:=true;
end.
На стековерфловочке завелся некий GuSoft (sic!), который регулярно постит свои высеры через гоогле транслате. Сегодня вот таким шедевром разродился, хочет бесплатных консультаций чтобы в этой херне ему поискали ошибки и «оптимизировали».
+98
if RadioGroup1.ItemIndex=0 then cpr:=cpr+1;
if RadioGroup1.ItemIndex=1 then cth:=cth+1;
if RadioGroup2.ItemIndex=0 then cch:=cch+1;
if RadioGroup2.ItemIndex=1 then czs:=czs+1;
if RadioGroup3.ItemIndex=0 then chd:=chd+1;
if RadioGroup3.ItemIndex=1 then cpr:=cpr+1;
if RadioGroup4.ItemIndex=0 then cth:=cth+1;
if RadioGroup4.ItemIndex=1 then cch:=cch+1;
if RadioGroup5.ItemIndex=0 then czs:=czs+1;
if RadioGroup5.ItemIndex=1 then chd:=chd+1;
if RadioGroup6.ItemIndex=0 then cpr:=cpr+1;
if RadioGroup6.ItemIndex=1 then cch:=cch+1;
if RadioGroup7.ItemIndex=0 then chd:=chd+1;
if RadioGroup7.ItemIndex=1 then cth:=cth+1;
....// Это всё в 60 строк
if (cpr>cth) and (cpr>cch) and (cpr>czs) and (cpr>chd) then cpr1:=+1
else
if (cth>cpr) and (cth>cch) and (cth>czs) and (cth>chd) then cth1:=+1
else
if (cch>cpr) and (cch>cth) and (cch>czs) and (cch>chd) then cch1:=+1
else
if (czs>cpr) and (czs>cch) and (czs>cth) and (czs>chd) then czs1:=+1
else
if (chd>cpr) and (chd>cch) and (chd>czs) and (chd>cth) then chd1:=+1;
if cpr>chd or czs or cth or cch then
begin
ShowMessage('человек-природа – все профессии, связанные с растениеводством, животноводством и лесным хозяйством;') ;
Datamodule4.ADOTable1.Edit;
Datamodule4.ADOTable1.FieldValues['test2']:=('человек-природа – все профессии, связанные с растениеводством, животноводством и лесным хозяйством;');
Datamodule4.ADOTable1.Post;
end
else
if chd>cpr or cth or cch or czs then begin
ShowMessage('человек-техника – все технические профессии;') ;
Datamodule4.ADOTable1.Edit;
Datamodule4.ADOTable1.FieldValues['test2']:=('человек-техника – все технические профессии;');
Datamodule4.ADOTable1.Post;
...... И далее результаты в общем их 5
отдельная кнопка для вывода остальных 10 вопросов х)
procedure TForm1.Button1Click(Sender: TObject);
begin
Radiogroup11.Visible:=true;
Radiogroup12.Visible:=true;
Radiogroup13.Visible:=true;
Radiogroup14.Visible:=true;
Radiogroup15.Visible:=true;
Radiogroup16.Visible:=true;
Radiogroup17.Visible:=true;
Radiogroup18.Visible:=true;
Radiogroup19.Visible:=true;
Radiogroup20.Visible:=true;
Button2.Visible:=True;
end;
Программа тестирования на профориентацию
хД сколько он radiogroup создал)
+101
//деление задачи на потоки
uTemp := 0;
while uTemp < uHTemp do
begin
case uTemp of
0 :uTipArr[uHTemp - 1].p2 := StrToInt(Edit1.Text);
//делим интегер :)
1 :uTipArr[1].p1 := uTipArr[uHTemp - 1].p2 shr Trunc(log2(StrToFloat(Edit1.Text)));
else //если не первая и не вторая
uTipArr[uTemp].p1 := uTipArr[1].p1 * uTemp;
end;
Inc(uTemp);
end;
+93
procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);
asm
CMP ECX, 0 { no array -> nop }
JE @@zerolength
PUSH EAX
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX
MOV ESI,EDX
MOV EDI,ECX
XOR EDX,EDX
MOV AL,[ESI]
MOV DL,[ESI+1]
CMP AL,tkLString
JE @@LString
CMP AL,tkWString
JE @@WString
CMP AL,tkVariant
JE @@Variant
CMP AL,tkArray
JE @@Array
CMP AL,tkRecord
JE @@Record
CMP AL,tkInterface
JE @@Interface
CMP AL,tkDynArray
JE @@DynArray
JMP @@error
@@LString:
CMP ECX,1
MOV EAX,EBX
JG @@LStringArray
CALL _LStrClr
JMP @@exit
@@LStringArray:
MOV EDX,ECX
CALL _LStrArrayClr
JMP @@exit
@@WString:
CMP ECX,1
MOV EAX,EBX
JG @@WStringArray
CALL _WStrClr
JMP @@exit
@@WStringArray:
MOV EDX,ECX
CALL _WStrArrayClr
JMP @@exit
@@Variant:
MOV EAX,EBX
ADD EBX,16
CALL _VarClr
DEC EDI
JG @@Variant
JMP @@exit
@@Array:
PUSH EBP
MOV EBP,EDX
@@ArrayLoop:
MOV EDX,[ESI+EBP+2+8]
MOV EAX,EBX
ADD EBX,[ESI+EBP+2]
MOV ECX,[ESI+EBP+2+4]
MOV EDX,[EDX]
CALL _FinalizeArray
DEC EDI
JG @@ArrayLoop
POP EBP
JMP @@exit
@@Record:
PUSH EBP
MOV EBP,EDX
@@RecordLoop:
{ inv: EDI = number of array elements to finalize }
MOV EAX,EBX
ADD EBX,[ESI+EBP+2]
Это так в дельфах автофинализация строк, длиннострок, вариантов, массивов, записей, интерфейсов, динмассивов реализована.
Вместо того, чтобы напрямую вызвать деструктор, там в рантайме (ПИЗДЕЦ, В РАНТАЙМЕ БЛЯТЬ!!!) проверяется тип поля, требующего финализацию и через три таких жопы наконец-то вызывается деструктор. И это, блять, я ещё создал свой TInterfacedObject, потому что иначе бы деструктор вызывался не через три жопы, а через четыре, и одна из них - системный вызов.
Да, это при включённой оптимизации всё, если чё.
+112
{...}
type
a=(
january,
february,
march,
{--------------}
april,
may,
june,
{--------------}
jule,
august,
september,
{--------------}
october,
november,
december
);
b=(
seаson1,
seаson2,
seаson3,
seаson4
);
c=(
winter,
spring,
summer,
autumn
);
{...}
function d(e:a):b;
begin
case e of
january,
february,
march
:d:=seаson1;
april,
may,
june
:d:=seаson2;
jule,
august,
september
:d:=seаson3;
october,
november,
december
:d:=seаson4
end
end;
function f(g:a):c;
begin
case g of
december,
january,
february
:f:=winter;
march,
may,
april
:f:=spring;
june,
jule,
august
:f:=summer;
september,
october,
november
:f:=autumn
end
end;
begin
{...}
end.
Сделал на этой неделе в первом часу ночи.