AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

csv in combobox ausgeben

Ein Thema von SnGtKs · begonnen am 27. Nov 2005 · letzter Beitrag vom 28. Nov 2005
Antwort Antwort
Benutzerbild von SnGtKs
SnGtKs

Registriert seit: 25. Dez 2004
Ort: Bad Liebenwerda
37 Beiträge
 
Delphi 7 Personal
 
#1

csv in combobox ausgeben

  Alt 27. Nov 2005, 10:40
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:
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;
getrennt ...

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:
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;
diese einträge möchte ich in einer csv datei "auslagern" so dass man die später ohne probleme mit einem editor erweitern kann

wäre cool wenn jemand ne idee hätte
Sebastian Quaß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 11:59
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:
[HP]
14=10,00
17=10,00

[Lexmark]
19=10,00
20=10,00

[Canon]
M-6=10,00
BCI-21=10,00
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:

Delphi-Quellcode:
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;
Wenn in einem SpinEdit die Anzahl der Artikel verändert wird, dann kann in einem Panel der Gesamtpreis aktualisiert werden:

Delphi-Quellcode:
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;
Nur ein Vorschlag.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von SnGtKs
SnGtKs

Registriert seit: 25. Dez 2004
Ort: Bad Liebenwerda
37 Beiträge
 
Delphi 7 Personal
 
#3

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 18:17
hmm irgendwie sehe ich da nicht so durch ... bin halt ein n00b
Sebastian Quaß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 18:58
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
  Mit Zitat antworten Zitat
Benutzerbild von SnGtKs
SnGtKs

Registriert seit: 25. Dez 2004
Ort: Bad Liebenwerda
37 Beiträge
 
Delphi 7 Personal
 
#5

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 19:22
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
Miniaturansicht angehängter Grafiken
screenshootrefill_386.jpg  
Sebastian Quaß
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 21:08
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
Angehängte Dateien
Dateityp: zip demo_180.zip (2,6 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von SnGtKs
SnGtKs

Registriert seit: 25. Dez 2004
Ort: Bad Liebenwerda
37 Beiträge
 
Delphi 7 Personal
 
#7

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 21:37
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
Sebastian Quaß
  Mit Zitat antworten Zitat
praktiker

Registriert seit: 9. Jun 2003
Ort: Hesedorf
11 Beiträge
 
#8

Re: csv in combobox ausgeben

  Alt 27. Nov 2005, 23:16
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:
--------------------------------------------------------------------------------
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;
[edit=Luckie]Delphi-tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von SnGtKs
SnGtKs

Registriert seit: 25. Dez 2004
Ort: Bad Liebenwerda
37 Beiträge
 
Delphi 7 Personal
 
#9

Re: csv in combobox ausgeben

  Alt 28. Nov 2005, 10:24
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;
Sebastian Quaß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz