Einzelnen Beitrag anzeigen

Benutzerbild von HomerGER
HomerGER

Registriert seit: 8. Jun 2003
390 Beiträge
 
Delphi 7 Professional
 
#2

Re: Laden aus dll dauer ein bischen zu lange

  Alt 15. Jan 2004, 10:46
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;
  Mit Zitat antworten Zitat