Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Erstellen eines Eingabeformulars (https://www.delphipraxis.net/66649-erstellen-eines-eingabeformulars.html)

davar 1. Apr 2006 23:31


Erstellen eines Eingabeformulars
 
Hallo Leute,

ich möchte eine Art Eingabeformular erstellen, wie man es z.B. von HTML-Formularen kennt. Wie z.B.

Beschreibung 1 2 3 4 5
Punkt 1 O O O O O
Punkt 2 O O O O O
Punkt 3 O O O O O
Punkt 4 O O O O O
Punkt 5 O O O O O
.....


Unter den "O" soll man sich dementsprechend Checkboxen oder ggf. RadioButtons vorstellen. Wichtig ist, dass die Anzahl der Punkte variabel ist, also es können genauso gut 10 Zeilen sein, aber auch 100. Nur zu jeder Zeile soll eine vordefinierte Anzahl von Checkboxen/RadioButtons hinzugefügt werden.

Jemand eine Idee, wie man das annähernd machen kann? Weiss nicht, in welche Richtung ich überlegen soll..

MfG

davar

3_of_8 2. Apr 2006 00:07

Re: Erstellen eines Eingabeformulars
 
Ich hab grade eben mal diesen Code geschrieben, seltsamerweise funktioniert er nicht...

Die Checkboxen werden gar nicht angezeigt.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  a: array of array of TLabel;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var xcount, ycount, I,J: Integer;
begin
xcount:=5;
ycount:=10;
setlength(a,xcount,ycount);
for I:=0 to xcount-1 do
for J:=0 to ycount-1 do
begin
a[I,J]:=TLabel.Create(Self);
a[I,J].width:=16;
a[I,J].height:=16;
a[I,J].left:=8+I*24;
a[I,J].top:=8+J*24;
a[I,J].visible:=True;
a[I,J].enabled:=True;
a[I,J].Color:=clred;
Application.ProcessMessages;
end;
end;

end.

toms 2. Apr 2006 00:14

Re: Erstellen eines Eingabeformulars
 
Musst den TLabels noch einen Parent zuweisen:

Delphi-Quellcode:
a[I,J]:=TLabel.Create(Self);
a[I,J].Parent := Self;

omata 2. Apr 2006 00:15

Re: Erstellen eines Eingabeformulars
 
Setz mal den Parent der Elemente.

3_of_8 2. Apr 2006 00:19

Re: Erstellen eines Eingabeformulars
 
Aso, ich dachte das geschieht schon bei Create(Self).

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  a: array of array of TCheckBox;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var xcount, ycount, I,J: Integer;
begin
xcount:=5;
ycount:=10;
setlength(a,xcount,ycount);
for I:=0 to xcount-1 do
for J:=0 to ycount-1 do
begin
a[I,J]:=TCheckBox.Create(Self);
a[I,J].parent:=self;
a[I,J].width:=16;
a[I,J].height:=16;
a[I,J].left:=8+I*24;
a[I,J].top:=8+J*24;
a[I,J].visible:=True;
a[I,J].enabled:=True;
end;
end;

end.

Christian Seehase 2. Apr 2006 01:43

Re: Erstellen eines Eingabeformulars
 
Moin Manuel,

Parent und Owner haben unterschiedliche Aufgaben.
Der Owner ist für die Lebensdauer des Objektes zuständig. Wird dieser zerstört, werden auch alle übrigen, untergeordneten mit zerstört, ohne dass man sich darum selber kümmern müsste, ausser man gibt, Sonderfall, nil als Owner an.

Der Parent ist für die Anzeige der Komponente zuständig, sie wird immer relativ zum Parent gezeichnet.
Gibst Du keinen Parent an, siehst Du die Komponente auch nicht.

davar 2. Apr 2006 11:03

Re: Erstellen eines Eingabeformulars
 
Also bei mir funktioniert der Code nicht.

In der Zeile
Delphi-Quellcode:
  a: array of array of TCheckBox;
bekomme ich die Fehlermeldung " '[' erwartet, aber 'OF' gefunden" und "Ordinaltyp erforderlich."..

3_of_8 2. Apr 2006 11:21

Re: Erstellen eines Eingabeformulars
 
Gibts bei Delphi 3 noch keine dynamischen Arrays? :gruebel:

Balu der Bär 2. Apr 2006 11:22

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von 3_of_8
Gibts bei Delphi 3 noch keine dynamischen Arrays? :gruebel:

Nein gibt es nicht.

DGL-luke 2. Apr 2006 11:26

Re: Erstellen eines Eingabeformulars
 
Gibts da nicht einen Trick, mit dem man das nachbilden kann? :gruebel: Hab da mal was in der Codelib gesehen, vielleicht auch bei den Tutorials/Kursen....

3_of_8 2. Apr 2006 11:41

Re: Erstellen eines Eingabeformulars
 
Evtl. Assembler? Naja, ich glaube das führt hier zu weit.

DGL-luke 2. Apr 2006 11:46

Re: Erstellen eines Eingabeformulars
 
http://www.delphipraxis.net/internal...ct.php?t=45131

davar 2. Apr 2006 12:56

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von 3_of_8
Gibts bei Delphi 3 noch keine dynamischen Arrays? :gruebel:

Wie würde es denn ohne dynamische Arrays aussehen?

Ich habe die Zeile mal geändert in
Delphi-Quellcode:
a: array [1..10] of TCheckBox;
aber dann kommt weiter unten in den Zeilen

Delphi-Quellcode:
a[I,J]:=TCheckBox.Create(Self);
a[I,J].parent:=self;
a[I,J].width:=16;
a[I,J].height:=16;
a[I,J].left:=8+I*24;
a[I,J].top:=8+J*24;
a[I,J].visible:=True;
a[I,J].enabled:=True;
bei "a[I,J]"
die Fehlermeldung "Array-Typ erforderlich."

mkinzler 2. Apr 2006 13:04

Re: Erstellen eines Eingabeformulars
 
Du hast a ja nur als eindimesnionalen Array definiert, verwendest aber 2 Dimensionen!

Delphi-Quellcode:
a: array[1..10,1..10] of TCheckBox;

davar 2. Apr 2006 13:11

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von mkinzler
Du hast a ja nur als eindimesnionalen Array definiert, verwendest aber 2 Dimensionen!

Delphi-Quellcode:
a array[1..10,1..10] of TCheckBox;

Da muss man natürlich drauf kommen, Danke!

Aber die Meldungen wollen nicht aufhören.. :(

Jetzt bekomm ich beim Beenden die Fehlermeldung "Runtime Error 216 at 00002AD0"....

mkinzler 2. Apr 2006 13:29

Re: Erstellen eines Eingabeformulars
 
Ich hab mal das obige Programm angeschaut, du solltest den Array so definieren:

Delphi-Quellcode:
a: array[0..10,0..10] of TCheckBox;
weil ja die Grenzen so verwendet werden (Scheife).

3_of_8 2. Apr 2006 13:47

Re: Erstellen eines Eingabeformulars
 
Wo genau? Wenn dir keine genaue Zeile angezeigt wird, setze bei jeder Anweisung nen Haltepunkt.

davar 2. Apr 2006 13:50

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von mkinzler
Ich hab mal das obige Programm angeschaut, du solltest den Array so definieren:

Delphi-Quellcode:
a: array[0..10,0..10] of TCheckBox;
weil ja die Grenzen so verwendet werden (Scheife).

Daran hat's gelegen. Nochmals Danke!

MfG

davar

3_of_8 2. Apr 2006 14:36

Re: Erstellen eines Eingabeformulars
 
Variabel ist das ganze dann natürlich nicht mehr... Leg dir mal ne Delphi 7 Personal oder so zu... auf Englisch am besten, da haste gleich ne Lizenz für Weitergabe von Anwendungen dabei.

Hawkeye219 2. Apr 2006 15:13

Re: Erstellen eines Eingabeformulars
 
Warum überhaupt Verweise auf die Checkboxen in einem Array speichern? Wenn man beim Erzeugen einer Checkbox einen Owner übergibt, übernimmt der doch die komplette Verwaltung. Durch einen geschickte Benennung der Komponenten kann man sie bei Bedarf über die Methode FindComponent des Owners suchen.

Wir benötigen zunächst eine Routine zum Erzeugen eines Namens für die Checkbox in Reihe aRow, Spalte aCol:
Delphi-Quellcode:
function TForm1.GetCheckboxName (aRow, aCol: Integer): string;
begin
  Result := Format('cxR%.3dC%.3d', [aRow, aCol]);
end;
Die folgende Routine liefert einen Zeiger auf die Checkbox in Reihe aRow, Spalte aCol:
Delphi-Quellcode:
function TForm1.FindCheckbox (aRow, aCol: Integer): TCheckBox;
begin
  Result := FindComponent(GetCheckboxName(aRow, aCol)) AS TCheckBox;
end;
Nun kann man die Checkboxen erzeugen:
Delphi-Quellcode:
var row, col : Integer;
    box     : TCheckBox;

begin
  for row := 0 to 9 do
    for col := 0 to 9 do
    begin
      box := TCheckBox.Create(Self);
      box.Parent := Self;
      box.Name := GetCheckboxName(row, col);
      box.SetBounds (8 + 16 * col, 8 + 16 * row, 14, 14);
      box.Caption := '';
    end;
end;
Der Zugriff auf die Checkbox in Zeile row, Spalte col erfolgt dann z. B. so:
Delphi-Quellcode:
FindCheckbox(row, col).Checked := True;
Zusätzlich könnte man die Funktion FindCheckbox noch als Getter-Methode für ein Array-Property benutzen.
Für den produktiven Einsatz sollte natürlich noch eine Überprüfung der Parameter in FindCheckbox eingebaut werden.

Gruß Hawkeye

davar 2. Apr 2006 16:37

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von 3_of_8
Variabel ist das ganze dann natürlich nicht mehr... Leg dir mal ne Delphi 7 Personal oder so zu... auf Englisch am besten, da haste gleich ne Lizenz für Weitergabe von Anwendungen dabei.


Da hab ich aber keine Datenbankunterstützung mehr und die brauche ich..

3_of_8 2. Apr 2006 16:44

Re: Erstellen eines Eingabeformulars
 
Kannst dir ja ein paar kostenlose Kompos dazu runterladen, bei Torry oder wasweißich...

Nebenbei, eventuell kann man die dynamischen Arrays in DLLs auslagern, die mit ner anderen Delphiversion kompiliert wurden? Wahrscheinlich nicht, aber ne Idee wärs.

DGL-luke 2. Apr 2006 16:47

Re: Erstellen eines Eingabeformulars
 
Zitat:

Zitat von 3_of_8
Kannst dir ja ein paar kostenlose Kompos dazu runterladen, bei Torry oder wasweißich...

Nebenbei, eventuell kann man die dynamischen Arrays in DLLs auslagern, die mit ner anderen Delphiversion kompiliert wurden? Wahrscheinlich nicht, aber ne Idee wärs.

*räusper*

http://www.delphipraxis.net/internal...=526247#526247

3_of_8 2. Apr 2006 16:49

Re: Erstellen eines Eingabeformulars
 
Den hab ich übersehen.

DGL-luke 2. Apr 2006 16:54

Re: Erstellen eines Eingabeformulars
 
Offenbar nicht nur du... ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr.

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