Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Edit mit variabler Nummer (https://www.delphipraxis.net/35546-edit-mit-variabler-nummer.html)

traudl 8. Dez 2004 18:45


Edit mit variabler Nummer
 
[b]Hallo DPler. Ich hab da mal ne blöde Frage. Ich hab ein Projekt in VB programmiert und bi jetzt umgestiegen auf DP. Mein Problem: Ist es Möglich eine Edit komponente zu nummerieren? zB. Edit[1] anstatt Edit1. Habe schon die Edit komponente umgeschrieben damit ich den Text zentrieren kann, aber die Funktion wäre absolut hilfreich, da ich ca 40 Editfelder habe und diese teilweise gleich behandle wegen focus und keypress ereignissen und so.
Hat jemand eine Idee. Bin langsam echt am verzweifeln.

Danke
Gruß Udo :gruebel:

Maximus 8. Dez 2004 18:47

Re: Edit mit variabler Nummer
 
Erstell doch eine Array

Delphi-Quellcode:
Edit: array[1..40] of TEdit;
Dann kannst dein edit immer mit
Delphi-Quellcode:
Edit[Nummer]
ansprechen

//Edit: Hups syntax Fehler :wall: - korriegiert!

MFG
Maximus

Luckie 8. Dez 2004 18:48

Re: Edit mit variabler Nummer
 
Entweder mit einem Array of TEdit oder in einer Schleife und dann mittels FindComponent draufzugreifen.

sakura 8. Dez 2004 18:50

Re: Edit mit variabler Nummer
 
Dieses visuelle erstellen eines Arrays, wie dieses unter VB möglich ist, geht in Delphi nicht. Irgendwann habe ich mal eine einleuchtende Erklärung dazu gelesen, leider diese aber nicht parat.

Wie dem auch sei, erstelle die Komponenten im Form-OnCreate Ereignis dynamisch und schiebe sie dann in ein Array. Das ist ohnehin die elegantere Lösung ;)

Ansonsten kannst Du beim Start Dein Array auch nachträglich mit Hilfe einer Schleife und Hier im Forum suchenFindComponent füllen.

...:cat:...

traudl 8. Dez 2004 19:12

Re: Edit mit variabler Nummer
 
Also ich erstelle alle Editfelder mit dem OnCreate Ereignis und bilde daraus einen Array und greife darauf zu. Jetzt habe ich den Fehler Undefinierter Bezeichner: 'Edit'
Ich hoffe ich peil das mal noch.

Delphi-Quellcode:
unit Unit1;

interface

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

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

  TEditNew = class(TEdit)
    public
      procedure CreateParams(var Params: TCreateParams); override;
    end;
var
  Form1: TForm1;
  Edit5: TEditNew;
  Edit6: TEditNew;
  Edit7: TEditNew;

implementation

{$R *.dfm}

{ Editfeld zentriert Ausgerichtet }
procedure TEditNew.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or ES_CENTER
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    Edit5 := TEditNew.Create(Self);
    Edit5.Parent := Self;
    Edit5.Text := '100';
    Edit5.SetBounds(184,96,45,24);
    Edit5.Font.Style := [fsBold];
    Edit5.Font.Name := 'Arial';
    Edit5.Font.Height := 15;
    Edit5.TabStop := True;
    Edit5.TabOrder := 0;
    Edit6 := TEditNew.Create(Self);
    Edit6.Parent := Self;
    Edit6.Text := '10';
    Edit6.SetBounds(184,120,45,24);
    Edit6.Font.Style := [fsBold];
    Edit6.Font.Name := 'Arial';
    Edit6.Font.Height := 15;
    Edit6.TabStop := True;
    Edit6.TabOrder := 0;
    Edit7 := TEditNew.Create(Self);
    Edit7.Parent := Self;
    Edit7.Text := '20';
    Edit7.SetBounds(184,144,45,24);
    Edit7.Font.Style := [fsBold];
    Edit7.Font.Name := 'Arial';
    Edit7.Font.Height := 15;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
    Edit: Array[5..7] of TEditNew;

end;

end.
Was mache ich falsch. Muss ich Edit noch als var definieren, wenn ja als was ?

glkgereon 8. Dez 2004 19:18

Re: Edit mit variabler Nummer
 
mach bitte die code-klammern auch wieder zu ;)

zudem ginge das so:

Delphi-Quellcode:
Edit: array[5..7] of TEditNew;
implementation

procedure onFormCreate;
begin
Edit[5]:=TEditNew.Create;
Edit[5].Text:='ich bin edit5';
end;

traudl 8. Dez 2004 19:22

Re: Edit mit variabler Nummer
 
Hey supii, Danke
Das ist ja gar nicht so umständlich. Hey Danke echt super von Euch.
Danke auch für den Tip mit der Code Klammer


Gruß Udo

:wall: :dancer2:

glkgereon 8. Dez 2004 19:24

Re: Edit mit variabler Nummer
 
die geht mit [./code.] wieder zu, net mit [.code.]

;)

die buttons zu benutzen is einfacher....

Luckie 8. Dez 2004 19:26

Re: Edit mit variabler Nummer
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to length(EditArray) - 1 do
  begin
    EditArray[i] := TEdit.Create(Form1);
    EditArray[i].Parent := Form1;
    EditArray[i].Name :='Edit'+IntToStr(i);
    EditArray[i].Left := 10;
    EditArray[i].Top := i*(EditArray[i].Height+10)+10;
    EditArray[i].Text := EditArray[i].Name;
  end;
end;

traudl 8. Dez 2004 19:26

Re: Edit mit variabler Nummer
 
Habs schon Danke.

Aber du weist ja aller Anfang ist schwer und manchmal dauert der Anfang auch länger.

:hi:

traudl 9. Dez 2004 15:51

Re: Edit mit variabler Nummer
 
Ich habe jetzt ein onKeypress Ereignis geschrieben, weiß aber nicht wie ich es dem Editfeld zuweisen kann.

Delphi-Quellcode:
procedure TForm6.Edit_neg(Sender: TObject; var Key: Char);
begin
    If not(key in [#48..#57,#8,#44..#46])
    then key := #0;
    If Key = #44 then Key := #46;
end;
weil ich kann in die Felder eingeben was ich will und nicht nur Zahlen.

Hat jemand eine Idee.

Gruß Udo

:thumb: :coder:

Luckie 9. Dez 2004 15:59

Re: Edit mit variabler Nummer
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure MyEditKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  EditArray: array[0..4] of TEdit;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to length(EditArray) - 1 do
  begin
    EditArray[i] := TEdit.Create(Form1);
    EditArray[i].Parent := Form1;
    EditArray[i].Name :='Edit'+IntToStr(i);
    EditArray[i].Left := 10;
    EditArray[i].Top := i*(EditArray[i].Height+10)+10;
    EditArray[i].Text := EditArray[i].Name;
    EditArray[i].OnKeyPress := MyEditKeyPress;
    EditArray[i].Tag := i;
  end;
end;

procedure TForm1.MyEditKeyPress(Sender: TObject; var Key: Char);
begin
  if Sender is TEdit then
    ShowMessage('Edit'+IntToStr((Sender as TEdit).Tag));
end;
Gleich mit der Mäöglichkeit zu entscheiden, welches Edit es ist.

traudl 9. Dez 2004 16:21

Re: Edit mit variabler Nummer
 
Hallo Michael,

Danke Dir. Ich komme mir echt hilflos vor, daß ich jedesmal fragen muss. Aber nach 3 Std. probieren ist mir echt nix mehr eingefallen.

Gruß Udo

traudl 10. Dez 2004 16:02

Re: Edit mit variabler Nummer
 
Hallo ich noch mal. Ich möchte daß das Editfeld den Focus solange hat bis der User was eingibt.
Jetzt will er ein Objekt. Was ich aber eingeb geht nicht.

Code:
procedure KeepFocus(e: TEditNew);
var s: String;
begin
    s:= e.Text;
    If s = ''
    then begin
    TextStart;
    e.SetFocus;
    end;
end;

procedure TForm6.EditExit(Sender: TObject);
begin
     KeepFocus((Sender as TEditNew))
end;
Code:
    { Tischeingabefelder }
  for i := 0 to length (Edit_L) - 1
    do begin
    Edit_L[i] := TEditNew.Create(Self);
    Edit_L[i].Parent := Self;
    Edit_L[i].Text := 'Edit_L'+IntToStr(i);
    Edit_L[i].Name :='Edit_L'+IntToStr(i);
    Edit_L[i].Left := 184;
    Edit_L[i].Height := 24;
    Edit_L[i].Width := 45;
    Edit_L[i].Font.Style := [fsBold];
    Edit_L[i].Font.Name := 'Arial';
    Edit_L[i].Font.Height := 15;
    Edit_L[i].TabStop := True;
    Edit_L[i].TabOrder := i;
    Edit_L[i].OnExit := EditExit();
ich weis wirklich nicht wie ich das tun soll. Bei einem normalen Edit Feld wird das onExit Event anders ausgewertet, ich weis aber nicht wie. Hat jemand ne Idee ???

:oops:

Gruß Udo

traudl 13. Dez 2004 07:04

Re: Edit mit variabler Nummer
 
So ein Wochenende ist doch was feines. Ich habe nur die Klammer weggelassen und jetzt geht es.

:dancer2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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