Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Postleitzahl mit Ort verknüpfen (https://www.delphipraxis.net/80941-postleitzahl-mit-ort-verknuepfen.html)

Steven2 17. Nov 2006 21:12

Re: Postleitzahl mit Ort verknüpfen
 
Hallo Marabu
Zitat:

Und herzlich willkommen in der DP, Steven.
Danke für die Willkommensgrüße :cheers:

Zitat:

Und noch besser, wenn du die Liste nicht bei jedem Klick auf den Button erstmal laden musst. Lade sie doch einach nur einmal zu Beginn deines Programms.
Muss ich dann zum Programmstart einfach nur die Datei so laden

Delphi-Quellcode:
var
  MyList: THashedStringList;
...
begin
  MyList := THashedStringList.Create;
  MyList.LoadFromFile(
    ExtractFilePath(Application.ExeName) + 'plzDat.txt');
...
hab's dann zum Programmende wieder freigegeben, kommt aber folgende meldung
Zitat:

---------------------------
Stack-Überlauf.
---------------------------
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
var
  MyList: THashedStringList;
begin
 MyList.Free;
end;
Mir ist nicht ganz klar wie ich das machen muss. Ist aber auch vielleicht nicht ganz so wichtig, ist ja auch so ganz schön schnell.

Grüße
Steven

raiguen 17. Nov 2006 22:52

Re: Postleitzahl mit Ort verknüpfen
 
Moin :-)

So müsstes du das machen, um die StringList beim Programmstart einmalig zu laden und bei Programmende wieder freizugeben:
Delphi-Quellcode:
...
  private
    { Private declarations }
    MyList: THashedStringList;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyList := THashedStringList.Create;
  MyList.LoadFromFile(
    ExtractFilePath(Application.ExeName) + 'plzDat.txt');
...
end;

//--angepasste proc von ACE-ppc:
procedure TForm1.Button8Click(Sender: TObject);
var
  Index: Integer;
begin
    index := MyList.IndexOfName(PlzEdit.Text + ' ');
    If index > -1 Then
    OrtEdit.Text := Trim(MyList.ValueFromIndex[index]);
end;

//--jetzte erst die Liste freigeben
procedure TForm1.FormDestroy(Sender: TObject);
begin
...
   MyList.Free;
...
end;
Also im Pronzip recht simpel: MyList als private deklarieren, im FormCreate erzeugen und laden, Suchläufe beliebig oft durchführen und im FormDestroy() MyList wieder freigeben...

Steven2 18. Nov 2006 12:10

Re: Postleitzahl mit Ort verknüpfen
 
Hallo Raiguen. Dankeschön für die Hilfe.


Eine letzte Frage habe ich doch noch zu dem Thema,
können auch andere Trenner verwendet werden anstatt
01054 = Dresden auch sowas 01054;Dresden?
ich habs versuch, bekomme aber nichts angezeigt.

Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var
  MyList: THashedStringList;
  Index: Integer;
begin
   MyList := THashedStringList.Create;
   MyList.LoadFromFile(
   ExtractFilePath(Application.ExeName) + 'plzdat.txt');
  try
    index := MyList.IndexOfName(Plz_edit.Text + ' '); // hier hab ich schon einiges ausprobiert
    If index > -1 Then
    Ort_edit.Text := Trim(MyList.ValueFromIndex[index]);
 finally
     MyList.Free;
  end;
end;
Grüsse, Steven

marabu 18. Nov 2006 14:49

Re: Postleitzahl mit Ort verknüpfen
 
Hallo Steven,

das Trennzeichen ist standardmäßig ein Gleichheitszeichen, aber du kannst über die Eigenschaft NameValueSeparator auch fast jedes andere Zeichen einstellen. Die Tatsache, dass es sich um ein einziges Zeichen handelt, ist auch Schuld daran, dass ich beim Suchen eine Leerstelle anhängen und beim gefundenen Eintrag die führende Leerstelle mit Trim() entfernen musste.

Freundliche Grüße

Steven2 18. Nov 2006 18:01

Re: Postleitzahl mit Ort verknüpfen
 
Hallo marabu
und schon wieder was gelernt.
[EDIT]
funktioniert super :)

Danke
Steven


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.
Seite 2 von 2     12   

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