Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi In Funktion Memo ändern (https://www.delphipraxis.net/79042-funktion-memo-aendern.html)

bundaberg 15. Okt 2006 12:51


In Funktion Memo ändern
 
Hi, habe ein kleines Problem an dem ich grad hänge.. Ich habe ein Funktion geschrieben, die mir aus einem Quelltext alle Verweise auf eine andere Seite rauskopiert. Nun möchte ich das sie in eine ListBox eingetragen werden, aber ich kann scheinbar aus der Funktion heraus nicht auf eine ListBox oder so zugreifen..
hier ein Beispiel wie es nicht geht:

Delphi-Quellcode:
    if alllink = True then begin
      link:='';
      for nr2:=linkanfang to linkend do link:=link + s[nr2];
      ShowMessage(link);
      ListBox1.Items.Add(link);
ich habe es auch mit einer globalen Variable versucht, will aber auch nicht so ganz :-(

mfg,
bundaberg

mkinzler 15. Okt 2006 12:53

Re: In Funktion Memo ändern
 
Wo ist diese Prozedur deklariert? Als Methode? In welcher Unit?

Luckie 15. Okt 2006 12:55

Re: In Funktion Memo ändern
 
Ist die Funktion eine Methode deiner Form-Klasse? Wenn nicht, musst du das Formular mit angeben, auf dem sich deine Listbox befindet.

Davon mal abgesehen, sollte man die Daten und deren Verarbeitung immer von der Oberfläche trennen. Das macht den Code leichter wartbar, übersichtlicher und man kann ihn leichter wiederverwenden.

Christian Seehase 15. Okt 2006 12:59

Re: In Funktion Memo ändern
 
Moin Bundaberg,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Ich vermute mal stark, dass Du die ListBox in einer Funktion ansprechen willst, die keine Methode des Formulares ist, auf dem sich die Listbox befindet.
Dann müsstest Du entweder aus der Funktion eine Methode machen, oder den Namen des Formulares noch davorschreiben.


Delphi-Quellcode:
TForm1 = class(TForm)
//...
  function MeineFunktion : string;
//...
end;

implementation

function TForm1.MeineFunktion : string;
begin
  // Hier kann dann die Listbox direkt angesprochen werden, wenn sie auf Form1 liegt
end;

//Oder

function MeineFunktion : string;
begin
  Form1.ListBox1.....
end;
Wenn sich die Funktion in der Unit des ersten Formulares befindet ist die erste Variante vorzuziehen, da sie dann ja logisch zum Formular gehört.

bundaberg 15. Okt 2006 13:06

Re: In Funktion Memo ändern
 
hmm.. und wie kann ich dann machen das ich nicht direkt die listbox anspreche, wenn es wie luckie sagt ungünstig ist?

Delphi-Quellcode:
function LinksMarkieren(RichEdit: TRichEdit): String;
var
s, link: String;
nr, nr2, linkanfang, linkend: Integer;
href, hrefend, alllink: Boolean;
begin
  for nr:=0 to Length(RichEdit.Text)
  do begin
    s:=RichEdit.Text;
    if (s[nr] = '<') then href := True;
    if href then
      if (s[nr] = 'a') and (s[nr-1] = '<') then linkanfang:=nr-1;

    if (s[nr] = '/') and (href=true) then hrefend:=True;

    if hrefend and (href=true) then
      if (s[nr] = 'a') and (s[nr+1] = '>') then
      begin
        linkend := nr+1;
        alllink := True;
      end;

    if alllink = True then begin
      link:='';
      for nr2:=linkanfang to linkend do link:=link + s[nr2];
      ListedLinks:=ListedLinks + link; // das ist der versuch mit der globalen, aber ist nicht was ich will
      ListBox1.Items.Add(link); // damit hat er scheinbar ein problem...
      alllink := False;
      href := False;
      hrefend := False;
    end;
  end;
end;
aufgerufen wird sie ann einfach mit:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  LinksMarkieren(RichEdit1);
end;
danke für eure Hilfe

marabu 15. Okt 2006 13:21

Re: In Funktion Memo ändern
 
Hi,

in deinem Fall müsste es wohl Form1.ListBox1.Items.Add() heißen, aber man hat dir ja schon beschrieben, warum das suboptimal ist. Hier noch ein thread, der sich auch mit deinem Problem beschäftigt hat: klick

Freundliche Grüße vom marabu

bundaberg 15. Okt 2006 13:35

Re: In Funktion Memo ändern
 
ok, vielen dank an alle, so werde ich es jetzt erstmal machen. das es nicht die optimalste lösung ist hab ich verstanden, bin mir aber nicht sicher wie ich es noch anders lösen könnte :-)
danke nochmal,
mfg
bundaberg


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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