![]() |
csv in combobox ausgeben
hallo ....
ihr seit doch alle so schlau und könnt mir sicher helfen... ich habe da ein problem bei einem projekt von mir ... ich schreibe gerade ein programm das es ermöglicht tintenpatronen zum refill anzunehmen ... in diesem programm gibt es 4 combobox wo man die patrone auswählen kann ... die combo box einträge habe ich mit Add('HP 15 10,00€); realisiert .... damit das ganze schön aussieht habe ich es mit
Delphi-Quellcode:
getrennt ...
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); var strVal, strAll: string; pos1 : Integer; rc: TRect; arrWidth: array [0..3] of Integer; begin Combobox1.Canvas.Brush.Style := bsSolid; Combobox1.Canvas.FillRect(Rect); strAll := Combobox1.Items[Index]; arrWidth[0] := 0; arrWidth[1] := 100; arrWidth[2] := 200; arrWidth[3] := 300; rc.Left := Rect.Left + arrWidth[0] + 2; rc.Right := Rect.Left + arrWidth[1] - 2; rc.Top := Rect.Top; rc.Bottom := Rect.Bottom; pos1 := Pos(' ', strAll); strVal := Copy(strAll, 1, pos1 - 1); Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); rc.Left := Rect.Left + arrWidth[1] + 2; rc.Right := Rect.Left + arrWidth[2] - 2; strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); pos1 := Pos(' ', strAll); strVal := Copy(strAll, 1, pos1 - 1); Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); rc.Left := Rect.Left + arrWidth[2] + 2; rc.Right := Rect.Left + arrWidth[3] - 2; strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); pos1 := Pos(' ', strAll); strVal := Copy(strAll, 1, pos1 - 1); Combobox1.Canvas.TextRect(rc, rc.Left, rc.Top, strVal); Combobox1.Canvas.MoveTo(rc.Right, rc.Top); Combobox1.Canvas.LineTo(rc.Right, rc.Bottom); strAll := Copy(strAll, pos1 + 1, Length(strAll) - pos1); end; nun zu meinem problem ... ich muss ja alle patronen mit Add(HP 15 10,00€); eingeben und nun habe ich mir so gedacht ich schreibe die ganzen patronentypen und den preis in eine csv datei und lese die wieder ein ... doch habe ich davon keinen plan wie man das machen könnet ...
Delphi-Quellcode:
diese einträge möchte ich in einer csv datei "auslagern" so dass man die später ohne probleme mit einem editor erweitern kann
with Combobox1.Items do
begin Add('HP 14 10,00€ '); Add('HP 17 10,00€ '); Add('HP 23 10,00€ '); Add('HP 28 10,00€ '); Add('HP 41 10,00€ '); Add('HP 49 10,00€ '); Add('HP 57 10,00€ '); Add('HP 78 15,00€ '); Add('HP 343 10,00€ '); Add('HP 344 10,00€ '); Add('HP 14 10,00€ '); Add('HP 15 10,00€ '); Add('HP 20 10,00€ '); Add('HP 26 10,00€ '); Add('HP 27 10,00€ '); Add('HP 29 10,00€ '); Add('HP 33 10,00€ '); Add('HP 45 10,00€ '); Add('HP 56 10,00€ '); Add('HP 58 10,00€ '); Add('HP 338 10,00€ '); Add('HP 339 10,00€ '); Add('Lexmark 19 10,00€ '); Add('Lexmark 20 10,00€ '); Add('Lexmark 26 10,00€ '); Add('Lexmark 27 10,00€ '); Add('Lexmark 60 10,00€ '); Add('Lexmark 80 10,00€ '); Add('Lexmark 83 10,00€ '); Add('Lexmark 90 10,00€ '); Add('Lexmark 16 10,00€ '); Add('Lexmark 17 10,00€ '); Add('Lexmark 48 10,00€ '); Add('Lexmark 50 10,00€ '); Add('Lexmark 70 10,00€ '); Add('Lexmark 82 10,00€ '); Add('Canon M-6 10,00€ '); Add('Canon BCI-21 10,00€ '); Add('Canon C-6 10,00€ '); Add('Canon Y-6 10,00€ '); Add('Canon BCI-24c 10,00€ '); Add('Canon PC-6 10,00€ '); Add('Canon M-3e 10,00€ '); Add('Canon PM-6 10,00€ '); Add('Canon Y-3e 10,00€ '); Add('Canon BC-05 10,00€ '); Add('Canon C-3e 10,00€ '); Add('Canon BK-6 10,00€ '); Add('Canon BCI-21 10,00€ '); Add('Canon BCI-10 10,00€ '); Add('Canon BCI-11 10,00€ '); Add('Canon BCI-24bk 10,00€ '); Add('Canon BCI-3eBK 10,00€ '); Add('Canon BX-3 10,00€ '); Add('Canon BC-02 10,00€ '); Add('Canon BC-20 10,00€ '); Add('Canon BC-60 10,00€ '); Add('unbekannt _ 10,00€ '); Add('unbekannt _ 15,00€ '); end; wäre cool wenn jemand ne idee hätte |
Re: csv in combobox ausgeben
Hallo,
hast dich ja mächtig angestrengt. Mein Ansatz wäre eher minimalistisch. Die Daten würde ich nicht im CSV-Format speichern, sondern als INI-Datei:
Code:
Im Programm würde ich die Daten über ein TMemIniFile ansprechen. In der ComboBox würde ich nur die Artikel-Bezeichnungen anzeigen - den Hersteller kann ich später zusteuern, wenn der Bestellzettel aufgebaut wird. Die ComboBox von HP würde ich im Ereignis FormCreate() so befüllen:
[HP]
14=10,00 17=10,00 [Lexmark] 19=10,00 20=10,00 [Canon] M-6=10,00 BCI-21=10,00
Delphi-Quellcode:
Wenn in einem SpinEdit die Anzahl der Artikel verändert wird, dann kann in einem Panel der Gesamtpreis aktualisiert werden:
const
HP_SECTION = 'HP'; procedure TDemoForm.FormCreate(Sender: TObject); begin iniFileName := ChangeFileExt(ParamStr(0), '.ini'); ini := TMemIniFile.Create(iniFilename); ini.ReadSection(HP_SECTION, HpComboBox.Items); end;
Delphi-Quellcode:
Nur ein Vorschlag.
procedure TDemoForm.HpSpinEditChange(Sender: TObject);
var sArtikel: string; dPreis: Double; begin with HpComboBox do sArtikel := Items[ItemIndex]; dPreis := ini.ReadFloat(HP_SECTION, sArtikel, 0); HpPanel.Caption := Format('%m', [HpSpinEdit.Value * dPreis]); end; Grüße vom marabu |
Re: csv in combobox ausgeben
hmm irgendwie sehe ich da nicht so durch ... bin halt ein n00b
|
Re: csv in combobox ausgeben
Das ist kein Problem, solange du die richtigen Fragen stellen kannst. Schreibe einfach, womit genau du ein Verständnisproblem hast und es wird dir sicher geholfen werden.
Freundliche Grüße vom marabu |
Re: csv in combobox ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
okay ... so sieht das programm aus: ... siehe anhang ...
in einer ComboBox sind alle Patronen drin also nicht nur HP also ComboBox 1 - 4 hat den selben inhalt. Diesen Inhalt der ComboBox will ich in einer csv oder wie dein vorschlag ist eine ini auslagern ... beim programmstart soll also der inhalt dieser datei in die combobox 1-4 eingelesen werden mich verwirrt nur dein code weil da was von nem spinedit drin ist und das habe ich ja garnicht. ich habe es mal mit deinem code versucht aber ich bekomme es net gebacken das ist mein problem ... ich hoffe du (oder ihr) seht durch |
Re: csv in combobox ausgeben
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Sebastian,
ich habe dir mal eine Demo (ohne safety code) erstellt, die dir zeigen soll, wie ich mir die externe Speicherung in einer INI-Datei und die Auswahl über ZWEI ComboBox-Komponenten vorstellen könnte. Es geht dabei nicht um das Design der Benutzerschnittstelle. marabu |
Re: csv in combobox ausgeben
okay danke dir ... das hilft mir schon mal weiter ... ich habe mal nen blick drauf geworfen ... und ich denke mal damit ist mein problem gelöst... thx ;)
|
Re: csv in combobox ausgeben
Falls du noch nicht zufrieden bist, dann Versuchs doch mal mit dieser von mir geschriebenen
Funktion. Am besten trennst du aber anstatt mit Leerzeichen die Einträge mit einem Komma. Beispiel Aufruf . showmessage( token('HP 730C,12.00 Euro,schwarz', ',' , 2) ); würde 12.00 Euro ausgeben; showmessage( token('HP 730C,12.00 Euro,schwarz', ',' , 3) ); würde schwarz ausgeben; showmessage( token('HP 730C,12.00 Euro',#32,2) ); würde "730C,12.00" ausgeben;
Delphi-Quellcode:
[edit=Luckie]Delphi-tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
--------------------------------------------------------------------------------
function Token(StrVar :string ;StrSearch : Char; Posit : byte) : String; var ZaehlPos,Maxlen : ^Integer; i : Integer; tmpstr : ^string; begin New(ZaehlPos); New(maxLen); new(tmpstr); try (* Result = ''*) Token:=''; maxlen^:=length(Strvar); if maxlen^ = 0 then exit; case posit of 1 : if pos(StrSearch,StrVar) = 0 then Token:=StrVar else Token:=copy(strVar,1,pos(StrSearch,StrVar)-1); 2..255: begin zaehlpos^:=1; for i:= 1 to maxlen^ do begin if strvar[i] = StrSearch then zaehlpos^:=zaehlpos^+1; if zaehlpos^ = Posit then break; end; {for i} tmpstr^:=copy(StrVar,i+1,maxlen^-i+1); if pos(StrSearch,TmpStr^) > 0 then Token:= copy(TmpStr^,1,pos(StrSearch,TmpStr^)-1) else Token:=tmpstr^; end; {for} end; {case} finally dispose(Zaehlpos); dispose(maxLen); dispose(tmpstr); end; end; |
Re: csv in combobox ausgeben
ich habe nach dem ich mal ein bissel im netzt gesucht habe das problem nun folgendermassen gelöst
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TIniFile; begin ComboBox1.Clear; ComboBox2.Clear; Edit1.Clear; Label1.Caption := (''); ini := TIniFile.Create('C:\test.ini'); ini.ReadSections(ComboBox1.Items); ini.free; end; procedure TForm1.ComboBox1Change(Sender: TObject); var ini1: TIniFile; test: string; begin ComboBox2.Clear; ini1:= TIniFile.Create('C:\test.ini'); test:= ComboBox1.Text; ini1.ReadSection(test, ComboBox2.Items); ini1.Free; end; procedure TForm1.ComboBox2Change(Sender: TObject); var ini2: TIniFile; res, test1, test2: string; begin ini2:= TIniFile.Create('C:\test.ini'); test1:= ComboBox1.Text; test2:= ComboBox2.Text; res := ini2.ReadString(test1, test2, ''); Edit1.Text := res + (' €'); ini2.Free; end; procedure TForm1.Button1Click(Sender: TObject); var Gesamttext: string; begin Gesamttext := ComboBox1.Text + ( ' ') + ComboBox2.Text + (' ') + Edit1.Text; Label1.Caption := Gesamttext; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 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