![]() |
Deklaration ändern ?
Hallo,
wie kann ich in einer Procedure eine Deklaration ändern. Möchte in meiner Procedure Comboboxen oder TTabControls füllen. Wenn man ein TTabControl füllen will, soll Die Variable Box als TTabControl.Tabs deklariert werden, ansonsten als TComboBox. Gruss Holger |
Re: Deklaration ändern ?
Zitat:
du schreibst allerdings etwas von einem Typ TTabControl.Tabs wobei Tabs ja dann ein Member wäre aber kein Typ :gruebel: |
Re: Deklaration ändern ?
a) Entweder Du findest einen gemeinsamen Vorfahren der Typen, die Du übergeben willst (wie schon geschrieben wurde)
oder b) Du überlädst (overload) die Funktion |
Re: Deklaration ändern ?
Ohh, da habe ich mich vertan.
Es geht um die Deklaration von TTabControl und TComboBox
Delphi-Quellcode:
oder
ComboBox1.items.Add('')
Delphi-Quellcode:
Ich könnte der Procedure z.B. mit einer 1 = TTabControl und 2 = TComboBox mitgeben.
TTabControl.Tabs.Add('');
Wie kann ich nun in der procedure TTabControl oder TComboBox füllen ? Vorher hatte ich in der Procedure fest = Box: TComboBox Gruss Holger P.S.: Hier die derzeitige Procedure ohe TTabControl:
Delphi-Quellcode:
ComboBox_fuellen (Box:TComboBox; Query:TQuery; Spalten:String; Anzahl:Integer; SQL: String);
|
Re: Deklaration ändern ?
TWinControl hat kein .Clear;
Gruss Holger |
Re: Deklaration ändern ?
Das Property items und Tabs sind beide vom Typ TStrings. Also benötigst du eine Funktion die als Übergabeparameter ein TStrings besitzt.
|
Re: Deklaration ändern ?
Also hier würde ich den von mir erwähnten Punkt b) bevorzugen.
Sonst musst Du innerhalb der procedure noch entscheiden, um welchen Typ Box es sich handelt. |
Re: Deklaration ändern ?
@Klaus: muss er nicht
Delphi-Quellcode:
DieProcedure(Combobox1.Items);
DieProcedure(TabControl1.Tabs); [...] procedure TYourClass.DieProcedure(Items: TStrings); begin Items.Add(''); end; |
Re: Deklaration ändern ?
müsste es nicht heissen:
Delphi-Quellcode:
procedure TYourClass.DieProcedure(var Items: TStrings);
|
Re: Deklaration ändern ?
Zitat:
|
Re: Deklaration ändern ?
nein, weil TStrings eine Klasse ist und eine Objectinstanz ein Pointer. Es ist also als würde man einen Pointer übergeben. Und da kann man auch einfach das ändern worauf der Pointer zeigt.
var verwendet man wenn der Übergabeparameter in der Funktion geändert werden können soll, aber nicht wenn nur das geändert werden soll worauf der Parameter zeigt. Selbst ohne var kannst du ja
Delphi-Quellcode:
aufrufen was dann etwas ändert. Du änderst also nicht den Übergabeparameter sondern der Übergabeparameter ändert seinen Inhalt anhand der Methoden.
Object_Instance_Parameter.Methode()
|
Re: Deklaration ändern ?
OK,
und wie bekomme ich das jetzt umgesetzt: (Bin noch nicht so der Profi) Wo implementiere ich das:
Delphi-Quellcode:
und wo das:
ComboBox_fuellen(Combobox1.Items);
ComboBox_fuellen(TabControl1.Tabs);
Delphi-Quellcode:
Kenne mich mit Klassendeklarationen noch nicht so aus.
TYourClass
Als was deklariere ich die Klasse TYourClass. Ich habe die proceduren alle in einer eigenständigen Unit, also ohne Form Gruss Holger |
Re: Deklaration ändern ?
So sieht das bei mir zur Zeit aus:
Delphi-Quellcode:
unit Unit_Funktionen;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, DB, DBTables; procedure ComboBox_fuellen (Box:TComboBox; Query:TQuery; Spalten:String; Anzahl:Integer; SQL: String); ... implementation uses Unit_Query_TerMaS; //ComboBox aus DB füllen procedure ComboBox_fuellen (Box:TComboBox; Query:TQuery; Spalten:String; Anzahl:Integer; SQL: String); var I: Integer; S: Integer; ... end; |
Re: Deklaration ändern ?
Hallo,
kann mir da keiner mehr helfen. Jetzt soll nämlich in der Procedure auch noch die DBComBoBox verarbeitet werden können .. Gruss Holger |
Re: Deklaration ändern ?
Delphi-Quellcode:
Ist dir damit geholfen?
procedure StringList_fuellen (Strings: TStrings; Query: TQuery; Spalten: String; Anzahl: Integer; SQL: String);
begin ... |
Re: Deklaration ändern ?
OK,
aber ich muss meiner Procedure doch noch übergeben in welche TComboBox oder TTAbControl die Strings übergeben werden. Die Strings werden auch erst in der Procedure ausgelesen. Hier mal die komplette Procedure:
Delphi-Quellcode:
Gruss
//ComboBox aus DB füllen
procedure ComboBox_fuellen (Box:TComboBox; Query:TQuery; Spalten:String; Anzahl:Integer; SQL: String); var I: Integer; S: Integer; E: Integer; Z: Integer; AktuelleSpalte: String; CBText:String; MyInt: Integer; begin I:= 1; //Zähler für Anzahl der Spalten S:= 1; //Ende von aktueller Spalte E:= 1; //Ende von vorheriger Spalte Z:= 0; //Das kein Bindestrich mehr angefügt wird Box.Clear; Query.Close; If SQL <> '' then Query.SQL[1] := SQL; //SQL optional Query.open; while Query.Eof <> true do begin for I := 1 to Anzahl do begin Z := Z + 1; for S:= E to length(Spalten) do begin //Trennen der Spalten if copy(Spalten,S,1) = ';' then begin AktuelleSpalte := copy(Spalten,E,S - E); break; end; end; //Prüfen auf Nummerische oder String - Spalte if TryStrToInt(Query[AktuelleSpalte], MyInt) = false then begin CBText := CBText + Query[AktuelleSpalte]; end else begin CBText := CBText + inttostr(Query[AktuelleSpalte]); end; //Trennzeichen einfügen if (Anzahl > 1) and (Anzahl <> Z) then CBText := CBText + ' - '; E := S + 1; end; I:= 1; //Text in ComboBox schreiben Box.items.Add(CBText); CBText := ''; Z:= 0; E:= 1; S:= 1; Query.next; end; end; Holger |
Re: Deklaration ändern ?
Noch mal ein Beispiel, das mit allen Abkömmlingen von TStrings funktionieren sollte (ich habe hier zur Verdeutlichung eine Memo, eine ComboBox und eine Listbox auf meiner Demo-Form):
Delphi-Quellcode:
procedure DoSomethingSenseless(sl: TStrings);
var i: integer; begin sl.BeginUpdate; sl.Clear; for i := 1 to 100 do sl.Add(Format('Eintrag %d',[i])); sl.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); begin DoSomethingSenseless(ListBox1.Items); DoSomethingSenseless(Memo1.Lines); DoSomethingSenseless(ComboBox1.Items); end; |
Re: Deklaration ändern ?
Hallo,
jetzt ist der Groschen gefallen. Da hatte ich wohl ein Brett vor em Kopf Jetzt heisst meine Procedure TStrings_fuellen. Man war das eine Geburt und eigentlich ganz einfach ... Gruss Holger |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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