Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Laden aus dll dauer ein bischen zu lange (https://www.delphipraxis.net/14277-laden-aus-dll-dauer-ein-bischen-zu-lange.html)

HomerGER 6. Jan 2004 01:56


Laden aus dll dauer ein bischen zu lange
 
Hallo ihr

ich lade aus einer dll ein rtf und suche dort nach einen anfang und ein ende dazwischen ist mein text
nur dauert das sehr lange und hat so ein blöden nebenefekt
der text wird nicht ganz gelöscht und wird nur überschrieben - sehr merkwürdig
Delphi-Quellcode:
//****************************************************************************** 
//Global
//Status Button Beschreibung aus Sprach_Shell.dll
Procedure XP_Tweak_Status_Button_Beschreibung_Lesen_GU(menu_i : Integer);
var
lib_h : THandle;
res_s : TResourceStream;
button_beschreibung1_sl : TStringList;
i : Integer;
menu_index_plus_s : String;
menu_index_minus_s : String;
begin_i : Integer;
end_i : Integer;
buffer_ms : TMemoryStream;
begin
    lib_h := LoadLibrary(PChar(g_sprachen_path_s + g_programm_sprache_s + '_Shell.dll'));

    button_beschreibung1_sl := TStringList.Create;
    button_beschreibung1_sl.Clear;
    buffer_ms := TMemoryStream.Create;
    buffer_ms.Clear;

    res_s := NIL;

    //Element aus Shell laden
    if (lib_h <> 0) then
    begin
        try
            res_s := TResourceStream.Create(lib_h, 'XP_Tweak_Button_Beschreibung', RT_RCDATA);

            button_beschreibung1_sl.Clear;
            button_beschreibung1_sl.LoadFromStream(res_s);

            //Aus StringList in XP_Tweak_Menu_Beschreibung_RichEdit kopieren
            Haupt_Form.XP_Tweak_Button_Beschreibung_RichEdit.Clear;
            Haupt_Form.Temp_RichEdit.Clear;
            Haupt_Form.Temp_RichEdit.Text := button_beschreibung1_sl.Text;

            //Beschreibung filtern
            menu_index_plus_s := '[+' + IntToStr(menu_i) + ']';
            menu_index_minus_s := '[-' + IntToStr(menu_i) + ']';

            begin_i := Haupt_Form.Temp_RichEdit.Lines.IndexOf(menu_index_plus_s) + 2;

            for i := 0 to begin_i do
            begin
                Haupt_Form.Temp_RichEdit.Lines.Delete(0);
            end;

            end_i := Haupt_Form.Temp_RichEdit.Lines.IndexOf(menu_index_minus_s);

            for i := end_i to Haupt_Form.Temp_RichEdit.Lines.Count -1 do
            begin
                Haupt_Form.Temp_RichEdit.Lines.Delete(end_i);
            end;

            Haupt_Form.Temp_RichEdit.Lines.SaveToStream(buffer_ms);
            buffer_ms.Position := 0;
            Haupt_Form.XP_Tweak_Button_Beschreibung_RichEdit.Lines.LoadFromStream(buffer_ms);

        finally
            res_s.Free;
            button_beschreibung1_sl.Free;
            buffer_ms.Free;
        end;
    end;
    FreeLibrary(lib_h);
end;
erklärung

ich lade mein rtf
in ein temprichedit das unsichbar ist
lösche alles was ich nicht brauche (alles vor [+x] und alles nach [-x]
dann in ein stream und dann ins richedit

geht alles nur sehr langsam 1-2sek
geht das schnell ?

[edit=Luckie]Code-Tags durch Delphi-Tags ersetzt. Mfg, Luckie[/edit]

HomerGER 15. Jan 2004 10:46

Re: Laden aus dll dauer ein bischen zu lange
 
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;

HomerGER 16. Jan 2004 23:03

Re: Laden aus dll dauer ein bischen zu lange
 
es ist ein rtf file
das file benutze ich um beschreibungen auszugeben

für die funktionen brauch ich zwar keine formatierung aber ich was soll ich machen?
die funktion soll eigentlich nur den text zwischen den [+x][-x] ausgeben
und in einer anderen funktion werden wörter gesuch - für eine suchfunktion also

CenBells 18. Jan 2004 23:34

Re: Laden aus dll dauer ein bischen zu lange
 
hallo,

für die suche im richedit solltest du die funktionen findtext oder so ähnlich verwenden. Das sucht dann den richtigen text und überließt die formatierungen.

Musst mal in der OH schauen.

Gruß
Ken


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz