Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Text in Combobox nach Auswahl ändern

  Alt 20. Dez 2007, 08:19
Moin Leute,

ich möchte hier jetzt noch mein Ergebnis posten. Ich war doch recht überrascht, wie viel Zeit ich in die Umsetzung dieser simplen funktion investieren mußte. Sicher deshalb, da mich das eingangs beschriebene verhalten der Combobox doch etwas verwirrt hatte (und wohl nicht nur mich). Ob es für meine Lösungsidee einen einfachen Weg gibt ohne eine abgeleitete Komponente von TCombobox zu erstellen hab ich nicht weiter erforscht. Sharky's Ansatz erscheint mir aber sinnvoll und hier auch umsetzbar.

Folgende Funktionsweise habe ich realisiert:

In der Combobox kann für den Anzeigenamen eine freier Eintrag (Direktes Schreiben in das Edit-Feld der Combobox) oder eine Kombination aus den Feldern Vorname, Name und Firma durch Auswahl im Auswahlfeld der Combobox gewählt werden. die auszuwählenden Einträge werden zur Laufzeit im OnDropDown-Ereignis erstellt. Der ausgewählte Kombinationstyp wird in FVisibleNameBuild gespeichert. Das macht Sinn, da bei Änderungen der entsprechenden edits für Vorname, Name oder Firma dann der anzeigename in der Combobox automatisch aktualisiert wird. Man muß also nach Änderung des Namens etc. nicht noch mal die gleiche auswahl in der Combobox wiederholen.

der passende Code sieht wie folgt aus:
Delphi-Quellcode:
  (* Typ zur automatischen Bildung des Anzeigenamens *)
  TVisibleNameBuild = (
                       vnb_Free, // freier Eintrag für Anzeigename
                       vnb_Vorname_Name, // Anzeigename aus Vorname Name zusammensetzen
                       vnb_Name_Vorname, // Anzeigename aus Name, Vorname zusammensetzen
                       vnb_Firma, // Anzeigename aus Firma bilden
                       vnb_Name_Firma, // Anzeigename aus Name, Firma zusammensetzen
                       vnb_Firma_Name // Anzeigename aus Firma, Name zusammensetzen
                       );


  TAddressEntryForm = class(TPTBaseForm)
  .......
  private
    FVisibleNameBuild : TVisibleNameBuild;
    procedure BuildVisibleName;
  .......
  end;


procedure TAddressEntryForm.BuildVisibleName;
begin
  ComboAnzeigename.Items[0] := ComboAnzeigename.Text;
  ComboAnzeigename.Items[1] := Format('%s %s', [EditVorname.Text, EditName.Text]);
  ComboAnzeigename.Items[2] := Format('%s, %s', [EditName.Text, EditVorname.Text]);
  ComboAnzeigename.Items[3] := EditFirma.Text;
  ComboAnzeigename.Items[4] := Format('%s, %s', [EditName.Text, EditFirma.Text]);
  ComboAnzeigename.Items[5] := Format('%s, %s', [EditFirma.Text, EditName.Text]);
end;

procedure TAddressEntryForm.ComboAnzeigenameChange(Sender: TObject);
begin
  if Comboanzeigename.ItemIndex = -1 then
    FVisibleNameBuild := vnb_Free
  else
    FVisibleNameBuild := TVisibleNameBuild(ComboAnzeigename.ItemIndex);
end;

procedure TAddressEntryForm.ComboAnzeigenameDropDown(Sender: TObject);
begin
  BuildVisibleName;
end;

procedure TAddressEntryForm.ComboAnzeigenameSelect(Sender: TObject);
begin
  if Comboanzeigename.ItemIndex = -1 then
    FVisibleNameBuild := vnb_Free
  else
    FVisibleNameBuild := TVisibleNameBuild(ComboAnzeigename.ItemIndex);
end;

procedure TAddressEntryForm.EditFirmaChange(Sender: TObject);
begin
  BuildVisibleName;
  ComboAnzeigename.ItemIndex := Integer(FVisibleNameBuild);
end;

procedure TAddressEntryForm.EditNameChange(Sender: TObject);
begin
  BuildVisibleName;
  ComboAnzeigename.ItemIndex := Integer(FVisibleNameBuild);
end;

procedure TAddressEntryForm.EditVornameChange(Sender: TObject);
begin
  BuildVisibleName;
  ComboAnzeigename.ItemIndex := Integer(FVisibleNameBuild);
end;
Mit dieser Lösung kann ich gut leben. Es macht auf jeden Fall Sinn in der Procedure BuildVisibleName zu prüfen, ob Einträge Leer sind. So kann man bei Bedarf noch ein überflüssiges Kommata unterdrücken (für z.B. Firma, Name ",Mustermann" wenn Firma leer ist).

Wer den Code gebrauchen kann, der kann da aber selber kreativ werden.

dank an alle und Gruß

oki
42
  Mit Zitat antworten Zitat