Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komponente in Funktion verwenden -> Kompo nicht gefunden! (https://www.delphipraxis.net/115772-komponente-funktion-verwenden-kompo-nicht-gefunden.html)

Darko 17. Jun 2008 19:49


Komponente in Funktion verwenden -> Kompo nicht gefunden!
 
Ich möchte in meiner Funnktion 2 Komponenten verwenden:

Delphi-Quellcode:
function LongName(short: String): String;
var li: Integer;
begin
  if long_names=True then
    begin
     for li := 0 to LbLehShort.Count - 1 do
      if ansipos(ansilowercase(short),ansilowercase(LbLehShort.Items.Strings[li]))
      = 1 then
       if long_direct=TRUE then
        Result:=LbLehLong.Items.Strings[li]
       else
        Result:='<font title="'+LbLehLong.Items.Strings[li]+'">'+short+'</font>';
  end;
end;
Zitat:

[Fehler] Unit2.pas(1144): Undefinierter Bezeichner: 'LbLehShort'
[Fehler] Unit2.pas(1148): Undefinierter Bezeichner: 'LbLehLong'
Wie kann ich die Komponente denn nu doch darin verwenden?

oki 17. Jun 2008 19:53

Re: Komponente in Funktion verwenden -> Kompo nicht gefun
 
wo hast du sie deklariert und instanziiert?

oki

mkinzler 17. Jun 2008 19:53

Re: Komponente in Funktion verwenden -> Kompo nicht gefun
 
Da es eine freie Funktion und keine Methode ist, musst du die Form angeben oder eine Methode drauss machen

Cyberbob 17. Jun 2008 19:56

Re: Komponente in Funktion verwenden -> Kompo nicht gefun
 
und aus
Delphi-Quellcode:
if long_direct=TRUE then
würde ich noch
Delphi-Quellcode:
if long_direct then
machen.

da es sonst zu problemen führen kann. das wurde auch mal in einem thread ausgiebig diskutiert, allerdings finde ich ihn nicht mehr

marabu 17. Jun 2008 20:22

Re: Komponente in Funktion verwenden -> Kompo nicht gefun
 
Hallo,

die Prüfung auf long_names gehört nicht in die Funktion. Der Test boolVar = True ist abgesehen von Implementierungsproblemen so elegant wie das Multiplizieren mit 1 (für Kenner). Eine Methode fände ich nicht so gut, den Zugriff über die Formvariable noch weniger. Wenn man die kurzen und langen "Namen" als Name-Value-Paare in einer StringList (ValueListEditor) hält, dann benötigt man noch nicht mal eine Funktion. Nebenbei entfällt das Risiko nicht synchronisierter ListBoxen. Den Einbau in ein HTML-Tag würde ich auch nicht unbedingt mit der Übersetzung short -> long in einen Topf werfen.

Delphi-Quellcode:
var
  dict: TStrings;
  sFont, shortName, s: string;

begin
  // ...
  shortName := 'RTFM';
  dict.Values[shortName] := 'read the fabulous manual';
  s := dict.Values[shortName];
  // ...
end;

function LongName(const shortName: string; sShort, sLong: TStrings): string;
var
  i: Integer;
begin
  i := sLong.IndexOf(shortName);
  if (i > -1) and (i < sLong.Count)
    then Result := sLong[i]
    else Result := shortName;
end;

begin
  sFont := Format('<font title="%s">%s</font>', [LongName(shortName), shortName]);
end;
Getippt und nicht getestet.

Grüße vom marabu


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