hier mein versuch es zu beschleunigen
leider nicht sehr erfolgreich
Delphi-Quellcode:
//******************************************************************************
//Global
//Button Beschreibung aus Sprach_Shell.dll für Suchfunction
Function XP_Tweak_Button_Beschreibung_Lesen_GU(button_i : Integer; offset_oben_i, offset_unten_i : Integer) : String;
var
lib_h : THandle;
res_s : TResourceStream;
button_beschreibung1_sl : TStringList;
i : Integer;
start_i : Integer;
ende_i : Integer;
begin_plus_s : String;
end_minus_s : String;
begin_i : Integer;
end_i : Integer;
begin
lib_h := LoadLibrary(PChar(g_sprachen_path_s + g_programm_sprache_s + '_Shell.dll'));
button_beschreibung1_sl := TStringList.Create;
button_beschreibung1_sl.Clear;
Haupt_Form.Temp_RichEdit.Clear;
res_s := NIL;
Result := '';
begin_i := -1;
end_i := -1;
//Element aus Shell laden
if (lib_h <> 0) then
begin
try
res_s := TResourceStream.Create(lib_h, 'XP_Tweak_Button_Beschreibung', RT_RCDATA);
Haupt_Form.Temp_RichEdit.Lines.LoadFromStream(res_s);
Haupt_Form.Temp_RichEdit.PlainText := False;
//Begin und End Strings bilden
begin_plus_s := '[+' + IntToStr(button_i) + ']';
end_minus_s := '[-' + IntToStr(button_i) + ']';
start_i := 0;
ende_i := 0;
if (button_i <> 1) then
begin
start_i := start_i + (button_i * 10);
ende_i := start_i + (button_i * 10) + 25; //ergib sich aus der min. zeilen
end
else
begin
start_i := 0;
ende_i := 25;
end;
if (ende_i > Haupt_Form.Temp_RichEdit.Lines.Count) then
begin
ende_i := Haupt_Form.Temp_RichEdit.Lines.Count -1;
end;
for i := start_i to ende_i do
begin
if (begin_plus_s = Haupt_Form.Temp_RichEdit.Lines.Strings[i]) then
begin
begin_i := i;
end;
if (end_minus_s = Haupt_Form.Temp_RichEdit.Lines.Strings[i]) then
begin
end_i := i;
Break;
end;
end;
//Wenn nicht gefunden Temp_RichEdit löschen
if ((begin_i = -1) OR (end_i = -1)) then
begin
button_beschreibung1_sl.Clear;
end
else
begin
//ShowMessage(inttostr(begin_i) + ' - ' + inttostr(end_i));
for i := begin_i + offset_oben_i to end_i - offset_unten_i do
begin
button_beschreibung1_sl.Append(Haupt_Form.Temp_RichEdit.Lines.Strings[i]);
end;
end;
//Ergebnis übergeben
Result := button_beschreibung1_sl.Text;
//ShowMessage(Result);
finally
res_s.Free;
button_beschreibung1_sl.Free;
end;
end;
FreeLibrary(lib_h);
end;