AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Neue Komponente mit 2 TEdit Komponenten

Ein Thema von Optiplex · begonnen am 28. Mai 2009 · letzter Beitrag vom 15. Jun 2009
Antwort Antwort
Seite 2 von 5     12 34     Letzte » 
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#11

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 15:19
Hallo shmia,oki
Natürlich ist das eine Komponente die nur für ein spezielles Projekt ist, und auch nur dort verwendet wird. Die beiden Editfelder sich auch die einzigen Komponenten die auf der Komponente erstellt werden sollen. die Textausgaben werden im Paint der Komponente mit Outtext ausgegeben(deshalb TCostumControl).
Bis jetzt hat mir aber auch noch keiner gesagt wie man zwei Editfelder am besten erstellet, macht man das besser im Constructeur mit self oder nil oder verwendet man eine andere Procedure. Wie führt man die beiden OnChance Ereignisse zusammen in ein Ereignis wie auch immer sie heißen mag. Das sind die Probleme die mich zur Zeit am meisten beschäftigen und auf die ich gerne eine Antwort hätte.
Das mit den Frames ist für mich momentan nur Bömische Dörfer, da ich wie gesagt diese noch nie richtig benutzt habe.Von meiner Komponente benötige ich im eigentlichen Programm bis zu 120Stk geht das mit Frames überhaupt.

Hallo Satty67,
Natürlich vermisse ich die Quelltexte der Komponenten, da man dort doch sehr viel lernen kann.
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 15:19
@shmia: Überzeugt

Nur am Rande, ich hasse Frames. Hatte ich nur Ärger mit. Vielleicht hatte ich mich damit auch nur zu blöd angestellt. So ist das halt mit Vorurteilen.

Gruß oki
42
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 15:24
grrr roter Kasten!

@optiplex:

Im Constructor mit Owner nil creieren, im CreateWnd Parent self zuweisen (natürlich für die enthaltenen Komponenten).

Das mit den Ereignissen erklär noch mal. Wies geht kann ich dir sagen, aber obs das ist, was du willst?

gruß
42
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 15:30
Zitat von oki:
Nur am Rande, ich hasse Frames. Hatte ich nur Ärger mit.
Ähm, ja, das ist mir auch schon aufgefallen.
Niemals Frames ableiten; das funktioniert nicht richtig.
Unterhalb Delphi 5.02 sind Frames ebenfalls sehr zickig.
Und man muss immer mal wieder mit ALT-F12 kontrollieren, welche Properties des Frames in der DFM-Datei des Formulars überschrieben werden und diese ggf. von Hand löschen.
Wenn man das beachtet und es nicht übertreibt mit den Frames, dann kann man damit ganz gut leben.
Andreas
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#15

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 15:55
Hallo Oki,
soll das heißen das ich eine Procedure CreateWnd überschreiben muss ? (dann bräuchte ich die genaue Syntax dieser Procedure) um dort die Eigenschaft Parent zuzuweisen. Ich dachte eigentlich dass die Eigenschaften immer im Constructeur zugewiesen werden.

Das mit Edit.Create(nil) im Constructeur habe ich verstanden. Aber warum Nil und nicht Self kannst du mir das erklären?

Das neue Ereignis soll folgendermaßen funktionieren, wird ein Editfeld verändert, soll dadurch das neue Ereignis ausgelöst werden. Ich muss praktische auf Änderungen in den Editfeldern reagieren können.

Ist es besser TEdit oder TCostumEdit zu verwenden?

Dieter
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#16

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 28. Mai 2009, 16:57
Delphi-Quellcode:
TMyCustomControl = class(TCustomControl)
privat
  FEdit1 : TEdit;
  FEdit2 : TEdit;
  FOnEditChange : TNotifyEvent;
  ...
protected
  procedure CreateWnd; override;
  procedure EditChangeEvent(Sender : TObject);
published
  property OnEditChange : TNotifyEvent read FOnEditChange write FOnEditChange;
...

procedure TMyCustomControl.CreateWnd;
begin
  Edit1.Parent := self;
  Edit1.OnChange := EditChangeEvent;
  Edit2.Parent := self;
  Edit2.OnChange := EditChangeEvent;
  ...
end;
...
procedure TMyCustomControl.EditChangeEvent(Sender : TObject);
begin
  if Assigned(FOnEditChange) then
    FOnEditChange(Sender);
end;
Der Owner muss nil sein, weil sonst beim Speichern des Formulares in dem du deine neue Kompo verwendest deine Edits mit serialisiert werden (stehen dann in der dfm mit drin). Beim nächsten Laden wird dann ein Edit durch den Construktor erstellt und eins durch die IDE beim Lesen der dfm. Wieder speichern, sind beim nächsten mal schon 3 ....

Verpasse deiner Komponente ein eigenes Ereignis OnEditChange vom Typ TNotifyEvent. Dann so wie oben. Willst du nicht mit dem Sender arbeiten, so kannst du dir da auch eine eigene Ereignisprocedure anlegen und alles was so interessant ist mit hoch reichen.
Bsp.:
  TEditChangeTextEvent = procedure(Sender : TObject; EditText : String) of Object; Das dann anstelle TNotifyEvent, die Ereignisproceduren anpassen, Text des sendenden Edit mit hochreichen etc.
Oder was immer du oben auch brauchst.

Gruß oki
42
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#17

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 29. Mai 2009, 09:13
Hallo Oki,
Vielen Dank für die Infos, ich muss also im Constructer die Edit-Felder Createn und in der CreateWnd die Eigenschaften setzen.
Ich gehe davon aus, dass ich die Edit-Felder im Destructor wieder freigeben muss.?
Da du FEdit1 : TEdit; im Code genommen hast nehme ich an,dass du TEdit und nicht TCustomEdit als Vorgänger bevorzugst oder hat dies einen besonderen Grund, dass du TEdit gemommen hast.
Muss ich sonst noch irgendwelche Besonderheiten beachten?
Ich werde am Wochenende mit dieser Komponente beginnen und hoffe, dass ich mit diesen Infos (die sehr gut sind, vor allem weil du sie erklären kannst) diese Komponente erstellen kann ohne allzuviele Fehlermeldungen.

Gruss Dieter,
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 29. Mai 2009, 09:39
Hallo Optiplex,

ob die Edits von TCustomEdit oder TEdit kommen ist in diesem Fall egal. Du willst sie ja in deiner Komponente verwenden und nicht vererben. Da der Owner nil ist, werden sie ja nicht gestreamt. Somit sind die Published-Felder hier uninteressant.
Bei einer Vererbung eines Edits würde ich TCustomEdit verwenden, hier TEdit.

Und ja, im Destructor frei geben. Das ist besserer Stil. Normalerweise wird beim Beenden der Anwendung automatisch alles frei gegeben, aber sollte deine Componente zur Laufzeit frei gegeben werden, so bleibt eine Speicherleiche. Das automatische Freigeben übernimmt sonst der Owner, der ist hier aber nil.

Sonst noch beachten? Ja, da gibt es einiges, aber im Moment fällt mir konkret nichts bei deinem Ansatz auf. Ich würde mir nur ein ordentliches Handling für dein OnEditChange ausdenken. Da alle Edits das gleiche Ereignis benutzen sollen ist die Identifizierung im Programm recht umständlich, welches Edit nun gerade geändert wurde. Da ich nicht weis, was du vor hast kann ich hier schlecht raten. Auf jeden Fall würde ich nicht TNotifyEvent verwenden sonder eine eigene Ereignisprocedure erstellen. Enthalten sollte die mindestens:
- Sender -> das Panel
- Text -> neuer Text des betroffenen Edits
- EditItent -> Identifier des Edits, das betroffen ist (Name, Index oder sonst was)

Gruß oki
42
  Mit Zitat antworten Zitat
Optiplex

Registriert seit: 5. Mär 2008
131 Beiträge
 
Delphi 2005 Personal
 
#19

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 29. Mai 2009, 13:01
Danke Oki,
Hier mal ein paar nähere Infos zur Komponente.
Also das ganze gehört zu einem Turnierprogram und in dieser Komponente soll das Ergebnis einer Partie eingetragen werden, im Programm muss ich dann auf diese Eingabe reagieren können, um das Ergebnis auszuwerten(dafür soll das neue Ereignis sein).Die Textausgaben sind nur Texte Spielrunde Startnummern der beiden Spieler und deren Spielernamen sowie der Spielort. Ich habe mich entschlossen eine Komponente dafür zu entwickeln weil bei 16 Spielern in einem Doppel KO system schon 30 Partien notwendig sind und normalerweise wir 32 Spieler bzw 64 Spielern pro Turnier in der Vergangenheit hatten. Dann kannst du dir vorstellen wie viele Edits und Labels notwendig sind um eine Ergebnistabelle zu erstellen und gut aussehen soll das ganze auch noch da der Bildschirm auf eine Leinwand bzw großen LCD-Bildschirm gezeigt wird.
Das ist mein erstes größeres Projekt an den ich bestimmt noch einige Wochen arbeiten werde, da ich nur Hobbyprogrammierer bin, und nur in meiner Freizeit mich damit beschäftigen kann. Deshalb bin ich auch für jede Hilfe oder Tip dankbar.

Gruß
Dieter
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#20

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 29. Mai 2009, 13:09
Joop, schönes Projekt.
Überleg dir erst mal, was die Edits melden sollen und was du im Programm von denen als Angaben brauchst um die Eingabe auswerten/verarbeiten zu können. Dann schreib dir dein Ereignis und implementiere das. Solltest du da nicht weiter kommen, helfe ich gerne. Aber erst mal musst du nachdenken. Was du im Programm von den Edits brauchst kann ich schwer sagen.

Gruß oki
42
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:50 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