![]() |
Dynamische Combobox
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DPler,
Ich hätte gerne eine Function in mein Programm eingebaut. Hier mal die Beschreibung: Um es einfacher zu machen nehmen wir an wir haben eine Form, eine Combobox, 2 Grinds, zwei Save Buttons und einen Matricesordner mit drpqmat-files. Programmstructur ist folgende: Rootordner Programm.exe Matrices mat.intra.drpqmat mat.inter.drpqmat mat2.intra.drpqmat mat2.inter.drpqmat So was will ich nun mit dieser Konztelation? Bei einer Comboboxchange soll eine Routine den Ordner Matrices nach drpqmat-files durchsuchen. Falls er welche findet soll er den Namen der Matrix (mat z.B.) der Combobox als Object hinzufügen. Falls es nur eine Datei gibt (z.B. nur mat1.intra.drpqmat) sollte er als inter.drpqmat mat.inter.drpqmat automatisch laden. Falls die andere fehlt andersherum. Zusätzlich soll auf Click auf ein Object der Inhalt in die zwei grinds eingelesen werden. Intra in Grind1. Inter in Grind2. Desweiteren sollen dann der Inhalt der jeweiligen Datei in einer Zeile in jeweils eine Edit geschrieben werden. Das Ganze klingt nun ein bisschen fett. K, 70% hab ich ja schon gelöst. Mir geht nur die dynamische Combobox ab. Hier währe der Sourcecode für das Project:
Delphi-Quellcode:
Code zum Einlesen in einer Zeile:
unit MeD1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, ExtCtrls, StrUtils, ShellAPI, Menus; type TForm1 = class(TForm) Panel1: TPanel; StringGrid1: TStringGrid; Panel2: TPanel; StringGrid2: TStringGrid; Panel3: TPanel; Label1: TLabel; Panel4: TPanel; Label2: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; MainMenu1: TMainMenu; File1: TMenuItem; ReStream1: TMenuItem; LoadIntra1: TMenuItem; LoadInter1: TMenuItem; SaveIntra1: TMenuItem; SaveInter1: TMenuItem; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure LoadIntra1Click(Sender: TObject); procedure LoadInter1Click(Sender: TObject); procedure SaveIntra1Click(Sender: TObject); procedure SaveInter1Click(Sender: TObject); procedure ReStream1Click(Sender: TObject); private { Private declarations } Procedure load_Grid(Grid: TStringGrid); Procedure save_Grid(Grid: TStringGrid); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin load_grid(StringGrid1); end; procedure TForm1.Button2Click(Sender: TObject); begin save_grid(StringGrid1); end; procedure TForm1.Button3Click(Sender: TObject); begin load_grid(StringGrid2); end; procedure TForm1.Button4Click(Sender: TObject); begin save_grid(StringGrid2); end; procedure TForm1.Button5Click(Sender: TObject); begin Close; end; Procedure TForm1.load_Grid(Grid: TStringGrid); Var X, Y, ActPos, PrevPos : Integer; sl : TStrings; Begin OpenDialog1.InitialDir := 'Matrices'; If Not OpenDialog1.Execute Then Exit; sl := TStringList.Create; Try // Öffne Datei in StringList sl.LoadFromFile(OpenDialog1.FileName); // laufe durch die sl For Y := 0 To pred(sl.Count) Do Begin // Spalte 0 X := 0; PrevPos := 1; // suche das erste "," ActPos := PosEx(',', Sl[Y], PrevPos); // verlasse die Schleife wenn kein "," mehr gefunden wurde While ActPos > 0 Do Begin // schreibe in die Zelle den Text zwischen dem vorherigen "," und dem gefundenen "," Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, (ActPos - PrevPos)); // Postion des letzten Kommas PrevPos := succ(ActPos); // suche das nächste "," ActPos := PosEx(',', Sl[Y], PrevPos); inc(X); End; // zum Schluss noch den Text ab dem zuletzt gefundenen Komma in die Zelle Grid.Cells[X, Y] := Copy(sl[Y], PrevPos, Length(sl[Y])); End; Finally // Freigeben der sl FreeAndNil(SL); End; End; Procedure TForm1.save_Grid(Grid: TStringGrid); Var X, Y : Integer; sl : TStrings; TempStr : String; Begin SaveDialog1.InitialDir := 'Matrices'; If Not SaveDialog1.Execute Then Exit; sl := TStringList.Create; Try With Grid Do For Y := 0 To pred(Grid.RowCount) Do Begin // Leeren des TempStr vor jeder Zeile TempStr := ''; For X := 0 To pred(Grid.ColCount) Do TempStr := TempStr + Trim(Cells[X, Y]) + ','; // Hinzufügen von TempStr zur sl // in der letzten Zeile muss das letzte Komma abgeschnitten werden If Y = pred(Grid.RowCount) Then sl.Add(Copy(TempStr, 1, Length(TempStr) - 1)) Else sl.Add(TempStr); End; // Speichern der StringList sl.SaveToFile(SaveDialog1.FileName); Finally // Freigeben der sl FreeAndNil(SL); End; End; procedure TForm1.LoadIntra1Click(Sender: TObject); begin Button1.Click; end; procedure TForm1.LoadInter1Click(Sender: TObject); begin Button3.Click; end; procedure TForm1.SaveIntra1Click(Sender: TObject); begin Button2.Click; end; procedure TForm1.SaveInter1Click(Sender: TObject); begin button4.Click; end; procedure TForm1.ReStream1Click(Sender: TObject); begin ShellExecute(0, Nil, PChar('ReStream\ReStream.exe'), Nil, Nil, SW_NORMAL); end; end.
Delphi-Quellcode:
Dieser Quellcodeenthält noch nicht die Combobox(den oberen meine ich...). Wenn wir hier eine Lösung für meinen :cat: Traum finden würde ich vor Freude in die :firejump: springen...
form1.edit1.text:=':intra_matrix=' + (Trim(StringReplace(form1.ListIntra.Items.Text, #13#10, '', [rfReplaceAll])))
|
Re: Dynamische Combobox
Hab schon eine andere Möglichkeit ohne der dynamischen Combobox gefunden. Danke jedenfalls.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 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