![]() |
Probleme mit ComboBox
Da ich nach langer Suche nichts gefunden habe, möchte ich hier einmal nachfragen.
Ich hoffe ich bin hier richtig :? Mein Programm soll einen Text aus einem Memo-Feld Zeile für Zeile auslesen, nach bestimmten Wortblöcken suchen, wenn diese gefunden wurden an Anfang der Zeile die ersten 10 Zeichen auslesen, in die Variable Datum schreiben und diese dann in eine Combobox namens cbLogins eintragen als Items. Hier mal der Code:
Delphi-Quellcode:
Nun wird (wenn ich im laufenden Programm die Combobox aufklappen lasse) gar nichts mehr angezeigt, auch vorher schon eingetragene Items verschwinden einfach aus der Liste :S
procedure TfrmMain.btMehrInformationenClick(Sender: TObject);
var I, Zeile : Integer; Ein, Datum, Uhrzeit, Koordinaten : string; begin for Zeile := 0 to hLogFenster.getAnzahl-1 do begin //getAnzahl entspricht Memo.lines.count; ein := hLogFenster.getZeile(Zeile); // laden der Zeile in var ein; // eine zu überprüfende Zeile sieht folgend aus ( entspricht nun var ein ) // 2012-04-28 22:12:29 [INFO] Drahcir [/#.###.###.##:#####] logged in with entity id 49095 at (453.375, 64.0, -13.53125) if pos('Drahcir', Ein) <> 0 // nach 'Drahcir' soll überprüft werden then if pos('logged in with entity id', ein) <> 0 // dies soll auch in der zeile stehen then begin for I := 12 to 19 do Uhrzeit := Uhrzeit + ein[I]; // speichern einer uhrzeit Datum := leftStr(Ein,10); // Speichern des Datums Koordinaten := copy(Ein, pos( '(' , Ein)+1,200); // Koordinaten werden gespeichert Delete(Koordinaten,pos(')',Koordinaten),1); // Klammer am Ende wird entfernt cbLogins.Items.Add(Datum); // Laden des "Datums" in combobox {Memo1.Lines.Add(Datum);} // laden in memo funktioniert!! Uhrzeit := ''; //zurücksetzen der Uhrzeit end; // ende von if pos() <> 0 end; // ende der for Zeile := 0 to hLog... end; Ich hoffe ihr versteht meine Probleme und könnt mir helfen oder zumindest eine Denkhilfe geben :) EDIT: hab die forschleife nach
Delphi-Quellcode:
geändert
for Zeile := 0 to hLogFenster.getAnzahl-1 do
|
AW: Probleme mit ComboBox
Delphi-Quellcode:
Das kann schon mal nicht funktionieren. Da der Zeilenindex nullbasierend ist muss es heißen:
for Zeile := 0 to hLogFenster.getAnzahl do
Delphi-Quellcode:
for Zeile := 0 to hLogFenster.getAnzahl-1 do
|
AW: Probleme mit ComboBox
Vielen Dank für deine Hilfe, damit haben wir ein Problem schonmal beseitigt aber mein genanntes Problem ist noch immer da :(
|
AW: Probleme mit ComboBox
Zitat:
und da irgendwer vergessen hat uns restlichen Code zu zeigen, welcher hier und sonstwo aufgerufen wird. Also kann dir niemand helfen. Wie wäre es mit debuggen und schauen wann die Einträge verschwinden, bzw. ob überhaupt jemals welche drin sind? Wenn diese über Items.Delete gelöscht werden, dann
Delphi-Quellcode:
überschreiben und dort eine eigene Klassenableitung übergeben, welche dich informiert, wenn was gelöscht werden soll.
function GetItemsClass: TCustomComboBoxStringsClass;
|
AW: Probleme mit ComboBox
Ich hau hier mal den ganzen Quellcode rein, auch wenn meine Bezeichnungen etwas konfus sind sollte man halbwegs verstehen worum es geht :)
Das mit dem debuggen peil ich nicht so ganz, damit muss ich mich auch nochmal ausführlicher Befassen, sry :( Aber schön, das in diesem Teil des Codes schonmal kein Fehler vorliegt, da bin ich schon ein wenig erleichter :o Ich hoffe das der vollständige Code mehr Licht ins Dunkel bringen kann und schonmal vielen Dank für die Mühe und Zeit :)
Delphi-Quellcode:
und hier noch mein mLoganzeige was ab und an genutzt wird ...
unit mSpielerDB;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IniFiles, mLogAnzeige, Grids, ComCtrls, Calendar, ValEdit, StrUtils; type TfrmMain = class(TForm) btSpielersuche: TButton; cbSpieler: TComboBox; btMehrInformationen: TButton; lbweitereInfos: TLabel; cbLogIns: TComboBox; lbAktualisierung: TLabel; Memo1: TMemo; procedure btSpielersucheClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btMehrInformationenClick(Sender: TObject); private ini: TIniFile; filename: String; hLogFenster : TfrmLogAnzeige; zDatum : string; public { Public-Deklarationen } end; var frmMain: TfrmMain; implementation {$R *.dfm} procedure TfrmMain.FormCreate(Sender: TObject); var SpielerlisteIni : TIniFile; Spielerliste : String; I : Integer; begin {***** Auslesen einer Spieler.ini, Eintrag der möglichen Spieler in eine Combobox} Spielerliste := ExtractFilePath(ParamStr(0)) + 'Spieler.ini'; SpielerlisteIni := TIniFile.Create(Spielerliste); SpielerlisteIni.ReadSection('Spieler', cbSpieler.Items); SpielerlisteIni.Free; {***** Anlegen des Log-Formulars mit Textanzeige *****} //Achtung: Nach dem Create wird das OpenDialog geöffnet!!! hLogFenster := TfrmLoganzeige.Create(frmMain); hLogFenster.Show; end; procedure TfrmMain.btSpielersucheClick(Sender: TObject); var SpielerlisteIni : TIniFile; Spielerliste : String; I : Integer; begin btSpielersuche.Enabled := false; cbSpieler.Enabled := false; Caption := 'Suche: ' + cbSpieler.Text; {**** Eventuelles Schreiben eines neuen Charakters in die Spieler.ini} Spielerliste := ExtractFilePath(ParamStr(0)) + 'Spieler.ini'; SpielerlisteIni := TIniFile.Create(Spielerliste); SpielerlisteIni.WriteString('Spieler', cbSpieler.Text, ''); SpielerlisteIni.Free; {**** Auslesen oder anlegen einer Spielerdatei mit Eintragen des Änderungsdatum} If Trim(cbSpieler.Text) <> '' Then begin filename := ExtractFilePath(ParamStr(0)) + Trim(cbSpieler.Text) + '.ini'; ini := TIniFile.Create(filename); ini.WriteString('Letzte Änderung', 'Datum', DateToStr(Now)); ini.Free; // freigeben der Spielerspezifischen .ini Datei end; end; procedure TfrmMain.btMehrInformationenClick(Sender: TObject); var I, Zeile : Integer; Ein, Datum, Uhrzeit, Koordinaten : string; begin //Öffnen der Spielerdatei filename := ExtractFilePath(ParamStr(0)) + Trim(cbSpieler.Text) + '.ini'; ini := TIniFile.Create(filename); for Zeile := 0 to hLogFenster.getAnzahl-1 do begin ein := hLogFenster.getZeile(Zeile); if pos(cbSpieler.Text, Ein) <> 0 then if pos('logged in with entity id', ein) <> 0 then begin for I := 12 to 19 do Uhrzeit := Uhrzeit + ein[I]; Datum := leftStr(Ein,10); Koordinaten := copy(Ein, pos('(',Ein)+1,200); Delete(Koordinaten,pos(')',Koordinaten),1); cbLogins.Items.Add(Datum); // Memo1.Lines.Add(Datum); Uhrzeit := ''; end; // ende von if pos() <> 0 end; // ende der for Zeile := 0 to hLog... // Auslesen der Datei lbAktualisierung.Caption := 'Aktualisiert: ' + ini.ReadString('Letzte Änderung', 'Datum', 'Fehler beim Auslesen!'); ini.ReadSectionValues('Logins', cbLogins.Items); //Auslesen des Datums // Freigeben der Datei ini.Free; end; end.
Delphi-Quellcode:
und damit du es ganz genau weißt:
unit mLogAnzeige;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmLogAnzeige = class(TForm) MemoLogAnzeige: TMemo; OpenDialog1: TOpenDialog; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public function getAnzahl: Integer; function getZeile(nr : Integer): String; procedure Loeschen; procedure schreibeZeile(s : String); end; var frmLogAnzeige: TfrmLogAnzeige; implementation {$R *.dfm} function TfrmLogAnzeige.getAnzahl: Integer; begin getAnzahl := MemoLogAnzeige.Lines.Count end; function TfrmLogAnzeige.getZeile(nr : Integer): String; begin getZeile := MemoLogAnzeige.Lines[nr]; end; procedure TfrmLogAnzeige.Loeschen; begin MemoLogAnzeige.Lines.Clear; end; procedure TfrmLogAnzeige.schreibeZeile(s : String); begin MemoLogAnzeige.Lines.Add(s) end; procedure TfrmLogAnzeige.FormCreate(Sender: TObject); begin if OpenDialog1.Execute then memoLoganzeige.Lines.LoadFromFile(Opendialog1.FileName); end; end.
Delphi-Quellcode:
//EDIT: Das Programm läuft ja einwandfrei durch, keine Fehler und gar nichts, die Daten werden auch in der Variable Datum gespeichert, wieso die dann nicht angezeigt werden ist meine Frage :?
object cbLogIns: TComboBox
Left = 8 Top = 120 Width = 305 Height = 26 DropDownCount = 90000 ItemHeight = 18 TabOrder = 3 Text = 'Datum der Logins anzeigen und auswählen' end |
AW: Probleme mit ComboBox
ohne wirklich nachvollziehen zu können was da ablaufen soll, diese Stelle
Delphi-Quellcode:
aufgerufen irgendwo nach
ini.ReadSectionValues('Logins', cbLogins.Items);
Delphi-Quellcode:
kann es sein dass Du danach suchst ?
cbLogins.Items.Add(Datum);
|
AW: Probleme mit ComboBox
Zitat:
ich hab wohl nur die ini.xxx gelesen und mir nichts dabei gedacht. Danke für die schnelle Hilfe trotz laufender EM ... :-D Nächstes mal kontrollier ich wirklich jede Zeile bevor ich mich hier melde, was sicher noch öfter passiert :) |
AW: Probleme mit ComboBox
Dir ist klar, dass du da ziemlich viele Speicherlecks in deinem Code hast?
|
AW: Probleme mit ComboBox
Das Programm so bisher war nur ne winzig kleine Idee und ich lerne erst seit einem Jahr Pascal und das auch nur Hobbymäßig alle paar Wochen mal^^
Die Idee kam mir heute morgen im Bus und war nur ne Fix-Idee die ich eigentlich nie vor hatte zu Ende zu führen, jetzt aber doch ein wenig Lust daran gewonnen habe. Wenn du mir noch netterweise erklären magst wo ich überall Fehler drinnen habe wär das ganz nett^^ |
AW: Probleme mit ComboBox
Du gibst zum Beispiel die ganzen Ini-Objekte nicht wieder frei.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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