AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi ganz simpler aufruf aber compiler meldet fehler...

ganz simpler aufruf aber compiler meldet fehler...

Ein Thema von Angel333 · begonnen am 15. Nov 2006 · letzter Beitrag vom 15. Nov 2006
Antwort Antwort
Angel333

Registriert seit: 1. Jan 2003
25 Beiträge
 
Delphi 6 Personal
 
#1

ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 00:04
Ich will n memo nach nem string durchsuchen ganz normal...das hat auch alles funktioniert.
Aber als ich dann aus einem String was löschen wollte sagt er immer:

Constant object cannot be passed as var Parameter


Delphi-Quellcode:
while i<=memo4.Lines.Count-1 do
begin
if pos('http://lix.in/',memo4.Lines[i])>0 then
  begin
        q:= pos('http://lix.in/',memo4.Lines[i]);
        for p:= Pos('http://lix.in/', memo4.Lines.Strings[i]) to length(memo4.Lines.strings[i]) do
          if (Memo4.Lines.Strings[i][p] <> ' ') then
          begin
          s := s + Memo4.Lines.Strings[i][p];
          end
        else
        begin
          break;
          delete(memo4.lines.strings[i],q,p);
        end;
          memo3.Lines.Add(s);
          s:='';
        end;
  end;
i:=i+1;
end;

Ich dreh durch...selbst wenn ich da delete('test',1,2) einsetze sagt er dass gleiche...
Markiert aber diese Zeile als Fehlerquelle...

Habe delphi 6 personal english

Vielen Dank im Vorraus.
Meine Highscore:
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 00:23
Arbeite nicht direkt mit Memo4.Lines.Strings, sondern speichere diese in eine Variable, mit der du in deiner Prozedur arbeitest und die du danach wieder deinen Memo4.Lines.String zuweist. Ist außerdem schneller
Julian J. Pracht
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 07:59
Guten Morgen.

Memo4.Lines.Strings[i] ist das gleiche wie Memo4.Lines[i]. In jedem Fall ist es eine property und kann nicht als Variable an die Prozedur Delete() übergeben werden - wie Julian dir schon geschrieben hat. Wenn du eine Position öfter verwendest, dann solltest du sie in einer Variablen zwischenspeichern und sie nicht ständig neu suchen lassen. Und wenn du deinen Code funktional gliederst, hast du mehr Spaß am Programmieren:

Delphi-Quellcode:
procedure ExtractUrls(s, urls: TStrings; prefix: String);
var
  i, iStart, iStop: Integer;
  line: String;
begin
  for i := 0 to Pred(s.Count) do
  begin
    line := s[i];
    iStart := Pos(prefix, line);
    if iStart > 0 then
    begin
      iStop := PosEx(' ', line, iStart + Length(prefix));
      if iStop = 0
        then urls.Add(Copy(line, iStart, MaxInt))
        else urls.Add(Copy(line, iStart, iStop - iStart));
    end;
  end;
end;
Verwenden kannst du diese Prozedur in deinem Fall so:

Delphi-Quellcode:
begin
  ExtractUrls(Memo4.Lines, Memo3.Lines, 'http://lix.in/');
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Angel333

Registriert seit: 1. Jan 2003
25 Beiträge
 
Delphi 6 Personal
 
#4

Re: ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 10:26
Danke euch...

Habs jetzt so gemacht wie marabu es gesagt hat...

Hattte kein PoseX (Delphi6 PE)

aber habs nachgebaut mit
Delphi-Quellcode:
function PosEx(const Substr: string; const S: string; Offset: Integer): Integer;
begin
  if Offset <= 0 then Result := 0
  else
    Result := Pos(Substr, Copy(S, Offset, Length(S)));

  if Result <> 0 then
    Result := Result + Offset - 1;
end;
Jedoch findet er trotzdem nur einen link wenn sie in einer zeile stehen...

Wenn wir das noch gelöst kriegen...Bettel....
Meine Highscore:
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 14:16
An mehrere Links pro Zeile hatte ich bei meinem Code garnicht gedacht, aber mit PosEx() und zwei zusätzlichen Zeilen sollte es funktionieren:

Delphi-Quellcode:
procedure ExtractUrls(s, urls: TStrings; prefix: String);
var
  i, iStart, iStop: Integer;
  line: String;
begin
  for i := 0 to Pred(s.Count) do
  begin
    line := s[i];
    iStop := 0;
    repeat
      iStart := PosEx(prefix, line, Succ(iStop));
      if iStart > 0 then
      begin
        iStop := PosEx(' ', line, iStart + Length(prefix));
        if iStop = 0
          then urls.Add(Copy(line, iStart, MaxInt))
          else urls.Add(Copy(line, iStart, iStop - iStart));
      end;
    until iStart = 0;
  end;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Angel333

Registriert seit: 1. Jan 2003
25 Beiträge
 
Delphi 6 Personal
 
#6

Re: ganz simpler aufruf aber compiler meldet fehler...

  Alt 15. Nov 2006, 14:39
Und ich hatte an repeat until nicht gedacht...

Vielen vielen dank!
Meine Highscore:
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 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