Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prozedur zusammenbauen (https://www.delphipraxis.net/171658-prozedur-zusammenbauen.html)

josefkoller 17. Nov 2012 17:27

Prozedur zusammenbauen
 
Hallo,

ich weiß nicht recht weiter.

Es gibt folgende Prozedur:

Delphi-Quellcode:
  DrawTextAcrossCols([arrColText[0,b],arrColText[1,b],arrColText[2,b]]);
Die Paramter in der Prozedur sind Arrayeinträge und unterscheiden sich lediglich in den Zahlen 0,1,2 und es sollen mit einer Schleife beliebige fortlaufende Zahlen eingesetzt werden können.

Also
DrawTextAcrossCols([arrColText[0,b],arrColText[1,b],arrColText[2,b],arrColText[n,b]]);

Zuerst dachte ich, ich baue diese Prozedurparamter mit einem String zusammen. Also

Delphi-Quellcode:
var
 prepare:string,
begin
 ....
    prepare:='([';
    for a:=0 to high(arrColumnText) do
      prepare:=prepare+'arrColText[0,b],';
    prepare:=copy(prepare,0,length(prepare)-1);
    prepare:=prepare+'])';
    for b:=0 to lns-1 do begin
      //DrawTextAcrossCols([arrColText[0,b],arrColText[1,b],arrColText[2,b]]);
      DrawTextAcrossCols+prepare;
    end;
 ....
end;
Ist natürlich Quatsch. Aber ich weiß nicht, wie ich es machen soll.

Diese "zusammengebaute" Prozedur muß in einem rutsch laufen, damit die mit den Paramtern übergebenen texte beim Ausdruck nebeneinander stehen.

Wenn ich die Prozedur mit einer Schleife so aufrufe:

Delphi-Quellcode:
for i:= 0 to high(arrColumnText) do
DrawTextAcrossCols([arrColText[[U][B]i[/B][/U],b]
werden die Spalten nicht nebeneinander, sondern versetzt untereinander dargestellt.
Scheidet also aus. Zurückspringen auf das ursprüngliche TOP scheidet auch aus.

So nach dem Motto: "Ich kann den Ausdruck ja nicht anhalten, um wieder oben zu beginnen!"

Wie kann ich die Prozedur so zusammenbauen, daß sie in einem Rutsch ausgeführt werden kann.

Danke.

Josef

Aphton 17. Nov 2012 17:51

AW: Prozedur zusammenbauen
 
Erstelle ein Array mit den "n" Einträgen und übergib es der Prozedur!

himitsu 17. Nov 2012 18:43

AW: Prozedur zusammenbauen
 
[del]

josefkoller 17. Nov 2012 19:27

AW: Prozedur zusammenbauen
 
Hi,

Zitat:

Zitat von Aphton (Beitrag 1191723)
Erstelle ein Array mit den "n" Einträgen und übergib es der Prozedur!

Entschuldigung, aber ich blick momentan nicht mehr recht durch.

In welchen Array Typ soll ich denn meine Stringarrays packen?

arrResult: array of .....????

for i:= 0 to n do |- die Null soll eben wäre das erste usw.
arrResult[i]:= // arrColText[0,b]; <-- so sehen meine Stringarrays jetzt aus.

Gib mir mal noch einen Typ. Ich komm momentan nicht vorwärts und nicht rückwärts.

Danke.

Josef

Popov 17. Nov 2012 19:44

AW: Prozedur zusammenbauen
 
Kann es ein, dass du sowas in der Art wie bei Format suchst:

Delphi-Quellcode:
Format('Text %s, Text %s, Text %s', [a, b, c]);
...
Das wird da so gelöst:

Delphi-Quellcode:
function Format(const Format: string; const Args: array of const): string;
begin
  ...
end;
//Edit:

Bei Polygon

Syntax:
Delphi-Quellcode:
procedure Polygon(Points: array of TPoint);
...
Beispiel:
Delphi-Quellcode:
Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]);
...
Delphi-Quellcode:
procedure TCanvas.Polygon(const Points: array of TPoint);
begin
  ...
end;

josefkoller 17. Nov 2012 20:10

AW: Prozedur zusammenbauen
 
Hi,

nein, sowas nicht. Ich such einfach eine Möglichkeit

eine Prozedur vor dem Aufruf zusammenzubasteln.

Je nachdem, wieviele Textarrays ich habe, muß die Prozedur unterschiedlich aufgerufen werden.

Also: Wenn ich ein Text array habe, dann so:

Delphi-Quellcode:
DrawTextAcrossCols([arrColText[0,b]]);
Wenn es zwei sind, dann halt so:

Delphi-Quellcode:
DrawTextAcrossCols([arrColText[0,b], [arrColText[1,b] ]);
usw.

Händisch ist das ja kein Problem. Ich schreib halt soviele hin, wie ich habe.

Es soll aber automatisiert werden und die Anzahl dieser TextArray's ist eben nicht immer gleich.

Danke.

Josef

Bummi 17. Nov 2012 20:14

AW: Prozedur zusammenbauen
 
Die Art der möglich Zuweisungen lassen auf eine Array of Const schließen, so einfach kann da kein Array zugewiesen werden. Hier gibt es einen Artikel zu diesem Thema: http://rvelthuis.de/articles/articles-openarr.html

Popov 17. Nov 2012 20:40

AW: Prozedur zusammenbauen
 
Das Beispiel mit Points ist vielleicht nicht so glücklich gewählt, aber ich ich erstelle ein Array mit einer n-Zahl von Points und übergebe es als Polygon. Das Polygon schluckt also n Parameter.

DeddyH 17. Nov 2012 20:42

AW: Prozedur zusammenbauen
 
Mehrdimensionale Arrays kann man AFAIK nicht als offene Arrays übergeben, aber wenn man typisiert, sollte das klappen. Schnell unter Lazarus zusammengetippt und ausprobiert:
Delphi-Quellcode:
type
  TStringArray = array of string;

procedure ShowValues(const ValueArrays: array of TStringArray);
var
  i, j: integer;
begin
  for i := Low(ValueArrays) to High(ValueArrays) do
    for j := Low(ValueArrays[i]) to High(ValueArrays[i]) do
      ShowMessage(ValueArrays[i, j]);
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  Arr1, Arr2: TStringArray;
begin
  SetLength(Arr1, 2);
  Arr1[0] := 'Hallo';
  Arr1[1] := 'Welt';
  SetLength(Arr2, 3);
  Arr2[0] := 'Hier';
  Arr2[1] := 'bin';
  Arr2[2] := 'ich';
  ShowValues([Arr1, Arr2]);
  Arr1 := nil;
  Arr2 := nil;
end;
Kann aber auch sein, dass ich das Problem nicht richtig verstanden habe.

Bummi 17. Nov 2012 20:55

AW: Prozedur zusammenbauen
 
IMHO wird etwas gesucht das so aussehen soll, aber natürlich nicht funktioniert
Delphi-Quellcode:
Type
TStringArray=Array of String;

procedure TForm5.Button1Click(Sender: TObject);
var
 DerWäreschönWennAlsConstArrayÜbergebbar:TStringArray;
begin
  SetLength(a,2);
  DerWäreschönWennAlsConstArrayÜbergebbar[0] := 'eins';
  DerWäreschönWennAlsConstArrayÜbergebbar[1] := 'zwei';
  Showmessage(Format('Ausgabe 1. %s 2. %s',DerWäreschönWennAlsConstArrayÜbergebbar));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz