Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Templates mit TurboDelphi (https://www.delphipraxis.net/76576-templates-mit-turbodelphi.html)

newuser01 6. Sep 2006 14:42


Templates mit TurboDelphi
 
Hallo

Neuer Tag neues Problem :-D Ich habe mir gestern TurboDelphi runtergeladen und ich muss sagen die Tamplates haben mich richtig begeistert. Ich bin dabei mir ein Template selber zu basteln also das immer ein hinterlegter Codeschnipses bei Aufruf des Templates
erscheint.

Das Template habe ich so gestaltet:

XML-Code:

<?xml version="1.0" encoding="utf-8" ?>
<codetemplate   xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
            version="1.0.0">
    <template name="search-string" invoke="manual">

      <point name="search-string">
      <text>search-string</text>
        <hint>suchen nach einen bestimmten string</hint>
      </point>
 
      <point name="Variable oder Wert">
      <text>Variable oder Wert</text>
      <hint>Wert</hint>
      </point>

      <point name="Text der durchsucht werden soll">
      <text>Text der durchsucht werden soll</text>
      <hint>Text</hint>
      </point>

      <point name="gesuchter String">
      <text>gesuchter String</text>
      <hint>Search String</hint>
      </point>

      <point name="slTmp">
      <text>slTmp</text>
      <hint>TStringList</hint>
      </point>

      <point name="sText">
      <text>sText</text>
      <hint>StringVariable</hint>
      </point>

      <point name="sSearch">
      <text>sSearch</text>
      <hint>StringVariable</hint>
      </point>

      <point name="i">
      <text>i</text>
      <hint>IntegerVariable</hint>
      </point>

      <description>string suchen</description>
      <author>newuser</author>

      <script language="Delphi" onenter="true" onleave="true">
      DeclareVariable(|slTmp|,StringList);
      DeclareVariable(|sText|,string);
      DeclareVariable(|sSearch|,string);
      DeclareVariable(|i|,integer);
      </script>

      <code language="Delphi" delimiter="|" ><![CDATA[

|search-string|

  for |i| := 0 to |Variable oder Wert| -1 do
  begin

  |slTmp| := TStringList.Create;
  slTmp.Clear();
  |sText| := '';
  |sText| := |Text der durchsucht werden soll|;
  |sSearch| := |gesuchter String|;

    while pos(sSearch,sText) <> 0 do
    begin
    slTmp.Add(copy(sText,1,pos(sSearch,sText)-1));
    delete(sText,1,pos(sSearch,sText));
    end;

  slTmp.Add(sText);

    if slTmp.Strings[i] = sText Then
    begin
    //
    end
      else
         begin
         MessageDlg('String gefunden',mtInformation, [mbOK], 0);
    end;//if
  end;//for

      ]]>
      </code>
   </template>
</codetemplate>

Wenn ich nun "search-string" eingebe und die Tab-Taste betätige vervollständigt sich dieser Code nur die Variablen "slTmp" und "sSearch" sind falsch deklariert worden eigentlich müsste "slTmp" vom Typ TStringList sein und "sSearch" vom Typ String. Ich hab keine Ahnung woran es liegen könnte denn die Variablen "sText" und "i" werden ja auch richtig Deklariert vielleicht könnt ihr ja weiterhelfen ?

Delphi-Quellcode:

procedure TForm1.Button1Click(Sender: TObject);
var
  slTmp: TObject; //falsch siehe XML-Code
  sText: string;
  sSearch: TObject; //falsch siehe XML-Code
  i: Integer;
begin

  for i := 0 to Wert -1 do
  begin

  slTmp := TStringList.Create;
  slTmp.Clear();
  sText := '';
  sText := Text der durchsucht werden soll;
  sSearch := gesuchter String;

    while pos(sSearch,sText) <> 0 do
    begin
    slDat.Add(copy(sText,1,pos(sSearch,sText)-1));
    delete(sText,1,pos(sSearch,sText));
    end;

  slTmp.Add(sText);

    if slTmp.Strings[i] = sText Then
    begin
    //
    end
      else
        begin
        MessageDlg('String gefunden',mtInformation, [mbOK], 0);
    end;//if

  end;//for
end;

Gruß
Holger

Balu der Bär 16. Sep 2006 08:16

Re: Templates mit TurboDelphi
 
Oha, dein Template war ja der reinste Horror. :P
Schonmal überlegt was passiert wenn man andere Variablenbezeichner eingibt? :zwinker:

Hier mal eine überarbeitete Version, klappt wunderbar:
XML-Code:
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate  xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
            version="1.0.0">
   <template name="search-string" invoke="manual">

      <point name="search-string">
      <text>search-string</text>
        <hint>suchen nach einen bestimmten string</hint>
      </point>

      <point name="Variable oder Wert">
      <text>Variable oder Wert</text>
      <hint>Wert</hint>
     </point>

     <point name="TStringList">
     <text>TStringList</text>
      <hint>TStringList</hint>
     </point>

      <point name="Text der durchsucht werden soll">
      <text>Text der durchsucht werden soll</text>
      <hint>Text</hint>
      </point>

      <point name="gesuchter String">
      <text>gesuchter String</text>
      <hint>Search String</hint>
      </point>

      <point name="slTmp">
      <text>slTmp</text>
      <hint>TStringList</hint>
      </point>

      <point name="sText">
      <text>sText</text>
      <hint>StringVariable</hint>
      </point>

      <point name="sSearch">
      <text>sSearch</text>
      <hint>StringVariable</hint>
      </point>

      <point name="i">
      <text>i</text>
      <hint>IntegerVariable</hint>
      </point>

      <description>string suchen</description>
      <author>newuser</author>

      <script language="Delphi" onenter="true" onleave="true">
      DeclareVariable(|slTmp|,|TStringList|);
      DeclareVariable(|sText|,string);
      DeclareVariable(|sSearch|,string);
      DeclareVariable(|i|,integer);
      </script>

      <code language="Delphi" delimiter="|" ><![CDATA[ 

  for |i| := 0 to |Variable oder Wert| -1 do
  begin
  |slTmp| := |TStringList|.Create;
  |slTmp|.Clear();
  |sText| := '|Text der durchsucht werden soll|';
  |sSearch| := '|gesuchter String|';

   while pos(|sSearch|,|sText|) <> 0 do
   begin
   |slTmp|.Add(copy(|sText|,1,pos(|sSearch|,|sText|)-1));
   delete(|sText|,1,pos(|sSearch|,|sText|));
    end;

  |slTmp|.Add(|sText|);

   if |slTmp|.Strings[i] = |sText| Then
    begin
    // 
    end
      else
         begin
         MessageDlg('String gefunden',mtInformation, [mbOK], 0);
    end;//if
  end;//for

      ]]>
      </code>
   </template>
</codetemplate>

newuser01 16. Sep 2006 10:10

Re: Templates mit TurboDelphi
 
Zitat:

Oha, dein Template war ja der reinste Horror.
zustimmt :mrgreen:


Danke für deine Hilfe

jbg 16. Sep 2006 11:53

Re: Templates mit TurboDelphi
 
[quote]
Delphi-Quellcode:
  slTmp := TStringList.Create;
  slTmp.Clear();
  sText := '';
  sText := Text der durchsucht werden soll;
Was wird denn das? Hat eine gerade neu erstelle Stringliste etwa schon einen Inhalt, den man mit Clear löschen muss? Wenn ich einem String einen neuen Wert zuweise, muss ich da den vorher String mit dem Leerstring vorinitialisieren?
Das mal abgesehen, von den zwei völlig unnötigen Pos() aufrufen, die das ganze nur verlangsamen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.

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