Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - namen eines steuerelements als funktionsparameter übergeben


bruder jonas - So 27.04.03 16:23
Titel: namen eines steuerelements als funktionsparameter übergeben
hallo,

ich möchte 5 comboboxen mit inhalten füllen. dafür habe ich eine funktion geschrieben, der ich die passenden parameter übergeben.

Wie kann ich den namen der combobox übergeben, so dass ich im funktionsrumpf den parameter nutzen kann, um daran .items.add anzuhängen

beispiel:

Quelltext
1:
function TfrmSave.fillCombo(sTable, sField, sCombo: string): boolean;                    

--> sCombo ist der name der jeweiligen combobox

Quelltext
1:
2:
3:
4:
5:
while not SqlQuery.eof do
begin
  XXXXXX.items.add(SqlQuery.fieldbyname(sField).asString);
  SqlQuery.Next;
end;

--> XXXXX soll der name der combobox sein, den ich in der funktion übergebe.

wie mache ich das??
danke

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


bis11 - So 27.04.03 16:25

Ich denke, das Du sowas nur machen kannst, wenn Du die 5 Comboboxen zur Laufzeit erzeugst.


bruder jonas - So 27.04.03 16:34
Titel: und wie geht das?
kannst du mir das an einem beispiel beschreiben??

danke dir.


bis11 - So 27.04.03 20:35

So erstellst Du zum Beispiel ein TSpeedButton :

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
      BasketButton := TSpeedButton.Create(self);     
      BasketButton.Parent := basketstrip;       // Name einer GroupBox          
      BasketButton.left := firstbutton_left;       // Variable mit einem Wert           
      BasketButton.Top := button_top;           // Variable mit einem Wert           
      BasketButton.Height := button_height;      // Variable mit einem Wert 
      BasketButton.Width := button_width;        // Variable mit einem Wert         
      BasketButton.Caption := Fields[0].AsString;   
      BasketButton.Name := Fields[0].AsString;      
      BasketButton.OnClick := BasketBtnClick;       
      button_top := button_top + 96;


Alibi - So 27.04.03 20:47

Wieso nur den Namen übergeben und nicht die Combobox?
Naja, wird einen Grund haben...
Nach dem Namen wirst du das mit FindComponent und einem Typecasting mit as machen können:

Quelltext
1:
(Findcomponent('TolleComboBox') as TComboBox).Items.Add('Wow');                    


Blackout - So 27.04.03 21:30

@alle: bitte nicht so umständlich :wink:

@bruder jonas:

hi, probiers mal so hier:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
// deine Beispiel Funktion:

function TfrmSave.fillCombo(sTable, sField, sCombo: TComboBox): boolean;  // "String" zu "TComboBox"
// sCombo ist der name der jeweiligen combobox 

while not SqlQuery.eof do 
begin 
sCombo.items.add(SqlQuery.fieldbyname(sField).asString); // sCombo.items.add
SqlQuery.Next; 
end;


// So und wennde die Funktion aufrufst gibst du als sCombo z.B. "Form1.ComboBox1" als Parameter mit


Ich hoffe ich konnte dir weiterhelfen


ShiKai - So 04.05.03 00:11

ich hab' den quelltext jetzt auf die schnelle zwar nicht ausprobiert, aber er sollte (mit einigen änderungen funktionieren).

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TestComponent(AComponent : TObject);
const
  BComponent = String : 'Test';
begin
  if (AComponent.ClassType = TComboBox) then
  begin
    if (TComboBox(AComponent).Name = BComponent) then
    begin
      ...;
      ...;
    end;
end;

so jetzt hab' ich sogar die richtigen namen nachgegooglet. so müsste es eigentlich funktionieren und man muss nur die 2 if für alle combos anpassen. d.h. für die gesamte funktion nur eine procedure/function.

viel spaß damit :-)

Moderiert von user profile iconTino: Code-Tags hinzugefügt.