AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Combobox

Ein Thema von DRPEnc · begonnen am 25. Mär 2004 · letzter Beitrag vom 25. Mär 2004
Antwort Antwort
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#1

Dynamische Combobox

  Alt 25. Mär 2004, 09:50
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:
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.
Code zum Einlesen in einer Zeile:
form1.edit1.text:=':intra_matrix=' + (Trim(StringReplace(form1.ListIntra.Items.Text, #13#10, '', [rfReplaceAll]))) Dieser Quellcodeenthält noch nicht die Combobox(den oberen meine ich...). Wenn wir hier eine Lösung für meinen Traum finden würde ich vor Freude in die springen...
Angehängte Dateien
Dateityp: rar med1.rar (198,4 KB, 0x aufgerufen)
CU

DRPEnc
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#2

Re: Dynamische Combobox

  Alt 25. Mär 2004, 10:51
Hab schon eine andere Möglichkeit ohne der dynamischen Combobox gefunden. Danke jedenfalls.
CU

DRPEnc
  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 01:51 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