![]() |
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: |
Re: Edit mit variabler Nummer
Erstell doch eine Array
Delphi-Quellcode:
Dann kannst dein edit immer mit
Edit: array[1..40] of TEdit;
Delphi-Quellcode:
ansprechen
Edit[Nummer]
//Edit: Hups syntax Fehler :wall: - korriegiert! MFG Maximus |
Re: Edit mit variabler Nummer
Entweder mit einem Array of TEdit oder in einer Schleife und dann mittels FindComponent draufzugreifen.
|
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 ![]() ...:cat:... |
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:
Was mache ich falsch. Muss ich Edit noch als var definieren, wenn ja als was ?
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. |
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; |
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: |
Re: Edit mit variabler Nummer
die geht mit [./code.] wieder zu, net mit [.code.]
;) die buttons zu benutzen is einfacher.... |
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; |
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: |
Re: Edit mit variabler Nummer
Ich habe jetzt ein onKeypress Ereignis geschrieben, weiß aber nicht wie ich es dem Editfeld zuweisen kann.
Delphi-Quellcode:
weil ich kann in die Felder eingeben was ich will und nicht nur Zahlen.
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; Hat jemand eine Idee. Gruß Udo :thumb: :coder: |
Re: Edit mit variabler Nummer
Delphi-Quellcode:
Gleich mit der Mäöglichkeit zu entscheiden, welches Edit es ist.
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; |
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 |
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:
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 ???
{ 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(); :oops: Gruß Udo |
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