📄 mudutil.pas
字号:
begin
inherited Create;
InitializeCriticalSection(FLock);
end;
procedure TGList.Lock;
begin
EnterCriticalSection(FLock);
end;
procedure TGList.UnLock;
begin
LeaveCriticalSection(FLock);
end;
{ TGStringList }
constructor TGStringList.Create;
begin
inherited Create;
InitializeCriticalSection(FLock);
end;
procedure TGStringList.Lock;
begin
EnterCriticalSection(FLock);
end;
procedure TGStringList.UnLock;
begin
LeaveCriticalSection(FLock);
end;
{ TQuickList }
function TQuickList.GetIndex(sName: string): Integer;
//0x0045B498
var
nLow, nHigh, nMed, nCompareVal : Integer;
begin
Result := -1;
if self.Count <> 0 then
begin
if self.Sorted then
begin
if self.Count = 1 then
begin
if CompareStr(sName, self.Strings[0]) = 0 then
Result := 0; // - > 0x0045B71D
end
else
begin //0x0045B51E
nLow := 0;
nHigh := self.Count - 1;
nMed := (nHigh - nLow) div 2 + nLow;
while (True) do
begin
if (nHigh - nLow) = 1 then
begin
if CompareStr(sName, self.Strings[nHigh]) = 0 then
Result := nHigh;
if CompareStr(sName, self.Strings[nLow]) = 0 then
Result := nLow;
break; // - > 0x0045B71D
end
else
begin
; //0x0045B59A
nCompareVal := CompareStr(sName, self.Strings[nMed]);
if nCompareVal > 0 then
begin
nLow := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end; //0x0045B5DA
if nCompareVal < 0 then
begin
nHigh := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
Result := nMed;
break;
end; //0x0045B609
end;
end;
end
else
begin //0x0045B609
if self.Count = 1 then
begin
if CompareText(sName, self.Strings[0]) = 0 then
Result := 0;
end
else
begin
nLow := 0;
nHigh := self.Count - 1;
nMed := (nHigh - nLow) div 2 + nLow;
while (True) do
begin
if (nHigh - nLow) = 1 then
begin
if CompareText(sName, self.Strings[nHigh]) = 0 then
Result := nHigh;
if CompareText(sName, self.Strings[nLow]) = 0 then
Result := nLow;
break;
end
else
begin //0x0045B6B3
nCompareVal := CompareText(sName, self.Strings[nMed]);
if nCompareVal > 0 then
begin
nLow := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
if nCompareVal < 0 then
begin
nHigh := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
Result := nMed;
break;
end;
end;
end;
end; //0x0045B71D
end;
end;
procedure TQuickList.SortString(nMIN, nMax: Integer);
//0x0045AF78
var
ntMin, ntMax : Integer;
s18 : string;
begin
if self.Count > 0 then
while (True) do
begin
ntMin := nMIN;
ntMax := nMax;
s18 := self.Strings[(nMIN + nMax) shr 1];
while (True) do
begin
while (CompareText(self.Strings[ntMin], s18) < 0) do
Inc(ntMin);
while (CompareText(self.Strings[ntMax], s18) > 0) do
Dec(ntMax);
if ntMin <= ntMax then
begin
self.Exchange(ntMin, ntMax);
Inc(ntMin);
Dec(ntMax);
end;
if ntMin > ntMax then
break
end;
if nMIN < ntMax then
SortString(nMIN, ntMax);
nMIN := ntMin;
if ntMin >= nMax then
break;
end;
end;
function TQuickList.AddRecord(sName: string; nIndex: Integer): Boolean;
//0x0045B0D0
var
nLow, nHigh, nMed, nCompareVal : Integer;
begin
Result := True;
if self.Count = 0 then
begin
self.AddObject(sName, TObject(nIndex));
end
else
begin //0x0045B133
if self.Sorted then
begin
if self.Count = 1 then
begin
nMed := CompareStr(sName, self.Strings[0]);
if nMed > 0 then
self.AddObject(sName, TObject(nIndex))
else
begin
if nMed < 0 then
self.InsertObject(0, sName, TObject(nIndex));
end;
end
else
begin //0x0045B19F
nLow := 0;
nHigh := self.Count - 1;
nMed := (nHigh - nLow) div 2 + nLow;
while (True) do
begin
if (nHigh - nLow) = 1 then
begin
nMed := CompareStr(sName, self.Strings[nHigh]);
if nMed > 0 then
begin
self.InsertObject(nHigh + 1, sName, TObject(nIndex));
break;
end
else
begin
nMed := CompareStr(sName, self.Strings[nLow]);
if nMed > 0 then
begin
self.InsertObject(nLow + 1, sName, TObject(nIndex));
break;
end
else
begin
if nMed < 0 then
begin
self.InsertObject(nLow, sName, TObject(nIndex));
break;
;
end
else
begin
Result := False;
break;
end;
end;
end;
end
else
begin //0x0045B26A
nCompareVal := CompareStr(sName, self.Strings[nMed]);
if nCompareVal > 0 then
begin
nLow := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
if nCompareVal < 0 then
begin
nHigh := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
Result := False;
break;
end;
end;
end;
end
else
begin
if self.Count = 1 then
begin
nMed := CompareText(sName, self.Strings[0]);
if nMed > 0 then
self.AddObject(sName, TObject(nIndex))
else
begin
if nMed < 0 then
self.InsertObject(0, sName, TObject(nIndex));
end;
end
else
begin //
nLow := 0;
nHigh := self.Count - 1;
nMed := (nHigh - nLow) div 2 + nLow;
while (True) do
begin
if (nHigh - nLow) = 1 then
begin
nMed := CompareText(sName, self.Strings[nHigh]);
if nMed > 0 then
begin
self.InsertObject(nHigh + 1, sName, TObject(nIndex));
break;
end
else
begin
nMed := CompareText(sName, self.Strings[nLow]);
if nMed > 0 then
begin
self.InsertObject(nLow + 1, sName, TObject(nIndex));
break;
end
else
begin
if nMed < 0 then
begin
self.InsertObject(nLow, sName, TObject(nIndex));
break;
end
else
begin
Result := False;
break;
end;
end;
end;
end
else
begin //0x0045B26A
nCompareVal := CompareText(sName, self.Strings[nMed]);
if nCompareVal > 0 then
begin
nLow := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
if nCompareVal < 0 then
begin
nHigh := nMed;
nMed := (nHigh - nLow) div 2 + nLow;
Continue;
end;
Result := False;
break;
end;
end;
end;
end;
end;
end;
procedure TQuickList.Lock;
begin
EnterCriticalSection(FLock);
end;
procedure TQuickList.UnLock;
begin
LeaveCriticalSection(FLock);
end;
constructor TQuickList.Create;
begin
inherited Create;
InitializeCriticalSection(FLock);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -