Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Deklaration ändern ? (https://www.delphipraxis.net/95998-deklaration-aendern.html)

SirThornberry 17. Jul 2007 15:06

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:
Object_Instance_Parameter.Methode()
aufrufen was dann etwas ändert. Du änderst also nicht den Übergabeparameter sondern der Übergabeparameter ändert seinen Inhalt anhand der Methoden.

HolgerCW 17. Jul 2007 15:17

Re: Deklaration ändern ?
 
OK,

und wie bekomme ich das jetzt umgesetzt: (Bin noch nicht so der Profi)

Wo implementiere ich das:

Delphi-Quellcode:
ComboBox_fuellen(Combobox1.Items);
ComboBox_fuellen(TabControl1.Tabs);
und wo das:

Delphi-Quellcode:
TYourClass
Kenne mich mit Klassendeklarationen noch nicht so aus.

Als was deklariere ich die Klasse TYourClass.

Ich habe die proceduren alle in einer eigenständigen Unit, also ohne Form

Gruss

Holger

HolgerCW 17. Jul 2007 15:20

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;

HolgerCW 18. Jul 2007 09:43

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

Bernhard Geyer 18. Jul 2007 09:47

Re: Deklaration ändern ?
 
Delphi-Quellcode:
procedure StringList_fuellen (Strings: TStrings; Query: TQuery; Spalten: String; Anzahl: Integer; SQL: String);
begin
 ...
Ist dir damit geholfen?

HolgerCW 18. Jul 2007 09:53

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:
//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;
Gruss

Holger

DeddyH 18. Jul 2007 11:15

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;

HolgerCW 18. Jul 2007 11:58

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 19:22 Uhr.
Seite 2 von 2     12   

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