AGB  ·  Datenschutz  ·  Impressum  







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

Zur Laufzeit Comboboxen hinzufügen

Ein Thema von KomischerKautz · begonnen am 14. Feb 2020 · letzter Beitrag vom 21. Feb 2020
Antwort Antwort
Seite 1 von 2  1 2      
Alt 14. Feb 2020, 12:22     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 12:30
Zitat:
[...] Comboboxen hinzufügen, dabei soll bei jedem weiteren Click eine neue Combobox unter der vorherigen angehängt werden.
Noch erfüllt keins der Beispiele diese Anforderung. Das Prinzip ist aber ersichtlich.
Für meins dann so in etwa... bezeichner könnten falsch sein, immer noch nur notepad..
Delphi-Quellcode:
var
  Form1: TForm1;
  cbList: TList;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  cbList := TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cb: TComboBox;
begin
  cb := TComboBox.Create(self);
  cb.Parent := self;
  cb.Top := (cbList.Count * (cb.Height + 3));
  // weitere eigenschaften setzen
  cbList.Add(cb);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer;
begin
// einfach mal testen ob's nötig ist, ich möchte mich nicht festlegen
  for i := 0 to cbList.Count-1 do
    TComboBox(cbList[i]).Free;
  cbList.Free;
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Feb 2020 um 12:35 Uhr)
  Mit Zitat antworten Zitat
KomischerKautz

Registriert seit: 5. Feb 2020
4 Beiträge
 
#3

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 12:44
Zitat:
[...] Comboboxen hinzufügen, dabei soll bei jedem weiteren Click eine neue Combobox unter der vorherigen angehängt werden.
Noch erfüllt keins der Beispiele diese Anforderung. Das Prinzip ist aber ersichtlich.
Für meins dann so in etwa... bezeichner könnten falsch sein, immer noch nur notepad..
Delphi-Quellcode:
var
  Form1: TForm1;
  cbList: TList;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  cbList := TList.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var cb: TComboBox;
begin
  cb := TComboBox.Create(self);
  cb.Parent := self;
  cb.Top := (cbList.Count * (cb.Height + 3));
  // weitere eigenschaften setzen
  cbList.Add(cb);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i: integer;
begin
// einfach mal testen ob's nötig ist, ich möchte mich nicht festlegen
  for i := 0 to cbList.Count-1 do
    TComboBox(cbList[i]).Free;
  cbList.Free;
end;

Super! Das funktioniert einwandfrei. Vielen Dank für euere Hilfe!
Nun abschließend noch; den Inhalt von Comboboxen fülle ich ja normalerweise in der StringList der Combobox in den Properties. Das funktioniert hier wie es scheint nicht, da ja noch keine Combobox vorhanden ist, welche ich füllen kann.
Wie kann ich nun den Inhalt aller erzeugter Comboboxen vorbestimmen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 14. Feb 2020, 13:06
In dem du den Wert zur Laufzeit hinzufügst bzw. setzt. (ComboBox.Items)
Markus Kinzler
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.094 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 15. Feb 2020, 11:18
Super! Das funktioniert einwandfrei. Vielen Dank für euere Hilfe!
Nun abschließend noch; den Inhalt von Comboboxen fülle ich ja normalerweise in der StringList der Combobox in den Properties. Das funktioniert hier wie es scheint nicht, da ja noch keine Combobox vorhanden ist, welche ich füllen kann.
Wie kann ich nun den Inhalt aller erzeugter Comboboxen vorbestimmen?
Wie schon geschrieben über die Items:

Combo.Items.Add('erster Eintrag');
Combo.Items.Add('zweiter Eintrag');
Combo.ItemIndex := 1; // Vorselektion 2. Eintrag, falls gewünscht
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 15. Feb 2020, 13:33
Ein neuer Versuch mit ein paar Zugaben, schönes Wochenende und diesmal wurden meinerseits auch Mängel berücksichtigt.

Viel Spass beim rumtesten.

Die .pas Datei:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    cbPnl: TPanel;
    mainPnl: TPanel;
    infoPnl: TPanel;
    addBtn: TButton;
    procedure addBtnClick(Sender: TObject);
  private
  public
    // manuell eingefügte events die ich später verwende
    procedure cbChange(Sender: TObject);
    procedure cbClick(Sender: TObject);
  end;

var
  Form1: TForm1;
  cbList: TList;

const
  minHeight = 120;

implementation

{$R *.dfm}

procedure TForm1.addBtnClick(Sender: TObject);
var
  cb : TComboBox;
begin
  // hier wird eine neue combobox erstellt mit ein paar grundeinstellungen
  // in diesem fall erstelle ich die cb in ein panel
  cb := TComboBox.Create(cbPnl);
  cb.Parent := Self;
  cb.Left := 3;
  cb.Top := cbList.Count * cb.Height + 3;
  cb.Style := csDropDownList;
  // damit man auch was zu sehen/klicken hat, ein paar einträge erzeugen
  cb.Items.Add('CB #' + IntToStr(cbList.Count));
  cb.Items.Add('Cool #' + IntToStr(cbList.Count));
  cb.ItemIndex := 0;
  // hier weise ich der cb events zu, für weitere events einfach diesem beispiel folgen
  cb.OnChange := cbChange;
  cb.OnClick := cbClick;
  // verwaltung der cb's
  cbList.Add(cb);
  // prototyp einer dynamischen formular größe
  if ((cbList.Count + 2) * cb.Height + 3) > minHeight then
    Height := (cbList.Count + 2) * cb.Height + 3;
end;

procedure TForm1.cbChange(Sender: TObject);
begin
  infoPnl.Caption := TComboBox(Sender).Text;
end;

procedure TForm1.cbClick(Sender: TObject);
begin
  infoPnl.Caption := TComboBox(Sender).Text;
end;

initialization
  cbList := TList.Create;

finalization
  cbList.Free;

end.
die .dfm Datei:
Delphi-Quellcode:
object Form1: TForm1
  Left = 192
  Top = 125
  BorderIcons = [biSystemMenu]
  BorderStyle = bsSingle
  Caption = 'DynCbDemo by KodeZwerg'
  ClientHeight = 81
  ClientWidth = 315
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PixelsPerInch = 96
  TextHeight = 13
  object cbPnl: TPanel
    Left = 0
    Top = 0
    Width = 150
    Height = 81
    Align = alLeft
    TabOrder = 0
  end
  object mainPnl: TPanel
    Left = 150
    Top = 0
    Width = 165
    Height = 81
    Align = alClient
    TabOrder = 1
    object infoPnl: TPanel
      Left = 1
      Top = 1
      Width = 163
      Height = 41
      Align = alTop
      BevelOuter = bvNone
      Caption = 'CB Item Display'
      TabOrder = 0
    end
    object addBtn: TButton
      Left = 16
      Top = 48
      Width = 129
      Height = 25
      Caption = 'Add ComboBox'
      TabOrder = 1
      OnClick = addBtnClick
    end
  end
end
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 15. Feb 2020, 15:19
Jetzt noch das Erstellen in eine separate Methode aufrufen, die von der Schaltfläche aufgerufen wird mit der Position usw. als Parameter und man kann den Code universell einsetzten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#8

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 15. Feb 2020, 15:56
Dann aber bitte die Liste noch als Feld es Formulars deklarieren, in dessen FormCreate erzeugen und im FormDestroy wieder freigeben, sonst bekommt man ganz schnell Kummer, wenn das Formular dynamisch erzeugt und freigegeben wird.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 17. Feb 2020, 14:39
...in eine separate Methode aufrufen...
da hab ich mir auch shon ein paar gedanken gemacht aber weiß momentan noch nicht so genau wie man es am elegantesten löst.
ich würde mir eine separate unit erzeugen mit einer type dynCreate = record deklaration und darin funktionen wie "ComboBox" definieren, aber wie ich die verschiedensten möglichkeiten einer verwaltung implementiere, da bin ich ratlos.
für den TE sollte das bereits vorhandene ausreichen denk ich mal.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Zur Laufzeit Comboboxen hinzufügen

  Alt 17. Feb 2020, 07:27
Delphi-Quellcode:
  cb := TComboBox.Create(cbPnl);
  cb.Parent := Self;
Sollte genau andersrum sein, Wein und Delphi verträgt sich nicht
Also
Delphi-Quellcode:
  cb := TComboBox.Create(Self);
  cb.Parent := cbPnl;
Self steht in diesem Fall für's aktuelle Formular, wenn man den Schnippsel als methode verfrachtet sollte "Self" mit 'nem Formular-Bezeichner ausgetauscht werden und als Parent halt ein Control oder Formular angeben.

Joar, die cbList in Formular Klasse mit rein, das macht Sinn, mein Fehler! (keine Ironie)

Ich hätte gerne noch 'ne mini Erklärung warum Liste.Create/.Free eher in FormCreate/Destroy rein sollte.
initialization/finalization ist doch eigentlich 'ne super stelle dafür, finde ich.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 03:30 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