AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Neue Komponente mit 2 TEdit Komponenten

Ein Thema von Optiplex · begonnen am 28. Mai 2009 · letzter Beitrag vom 15. Jun 2009
 
Optiplex

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

Re: Neue Komponente mit 2 TEdit Komponenten

  Alt 2. Jun 2009, 08:08
Hallo oki,
dank deiner Hilfe habe ich die Komponente TDartResultEdit am WE entwickelt. Siehe Anhang ( TDartResultEdit.Jpg ), was noch nicht implementiert ist das OnEdirChance Ereignis. Hier muss ich mir noch genau überlegen wie ich dieses Ereignis mache. Ich habe am WE viel dazugelernt aber es haben sich auch viele Fragen ergeben die du mir vielleicht beantworten kannst

Leider musste ich feststellen, dass der Focus zum Aktiven Control auf meiner Komponente wandert. Kann man das Irgendwie verhindern in dem das Control zwar aktiviert wird aber der Focus bei meiner Komponenete bleibt. Dadurch musste ich, weil ich eine Cursorsteuerung implementiert hatte, diese Auf die OnKeyDown Ereignisse des jeweiligen Controls umleiten dies hatte zur folge das die Cursorsteuerung nicht mehr so richtig funktionierte( Vor alle bei einem TButtom). Mit
Delphi-Quellcode:
Protected
procedure WMGetDLGCode(var msg: TMessage); message WM_GETDLGCODE;
....
Procedure TDartResultEdit.WMGetDLGCode(var msg: TMessage);
begin
  inherited;
  msg.Result:= msg.Result or DLGC_WantArrows;
end;
kann man bei seiner Komponente die CursorTasten abfangen. Wie macht man das bei den SubKomponenten? Dies ist das Aktuelle OnKeyDown Ereignis das wie gesagt an den Subkomponenten hängt(Sorry hatte noch keine Zeit den Code zu bereinigen)
Delphi-Quellcode:
procedure TDartResultEdit.EditKeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState);
var iii:integer;
  obj: tObject;
  edi:TEdit;
  btn:TButton;
begin
  obj:=nil;
  If(Key=vk_Down) or (Key=vk_up)then begin
    for iii :=0 to Parent.ComponentCount-1 do
      if Parent.Components[iii].classtype=TDartResultEdit then begin
        if TDartResultEdit(Parent.Components[iii]).enabled and
          TDartResultEdit(Parent.Components[iii]).Visible then
          case Key of
            vk_Down:
              begin
                if (TDartResultEdit(Parent.Components[iii]).Left = Left) and
                  (TDartResultEdit(Parent.Components[iii]).Top > Top)then
                  if obj=nil then obj:= Parent.Components[iii]
                else
                  if (TDartResultEdit(Parent.Components[iii]).Top < TDartResultEdit(obj).Top)
                    then obj:=Parent.Components[iii];
              end;
            vk_up:
              begin
                if (TDartResultEdit(Parent.Components[iii]).Left = Left) and
                  (TDartResultEdit(Parent.Components[iii]).Top < Top)then
                  if obj=nil then obj:= Parent.Components[iii]
                else
                  if (TDartResultEdit(Parent.Components[iii]).Top > TDartResultEdit(obj).Top)
                    then obj:=Parent.Components[iii];
              end;

          end;
      end;
      if obj<>nil then
        if TDartResultEdit(obj).Enabled and TDartResultEdit(obj).Visible then TDartResultEdit(obj).Setfocus;
  end;
  if Key=vk_Right then begin
    if Sender.ClassType =TEdit then begin
      edi:=TEdit(Sender);
      if edi.Name = FPlayerEdit1.Name then FPlayerEdit2.SetFocus;
// if edi.Name = FPlayerEdit2.Name then FBoardButton.SetFocus;
    end;
// if Sender.ClassType =TButton then FPlayerEdit1.SetFocus;
  end;
// btn:=TButton(Sender);
// if edi.Name = FPlayerEdit1.Name then FPlayerEdit2.SetFocus;
// if edi.Name = FPlayerEdit2.Name then FBoardButton.SetFocus;
// end;
  if Key=vk_Left then begin
    if Sender.ClassType =TEdit then begin
      edi:=TEdit(Sender);
      if edi.Name = FPlayerEdit2.Name then FPlayerEdit1.SetFocus;
// if edi.Name = FPlayerEdit1.Name then FBoardButton.SetFocus;
    end else FPlayerEdit2.SetFocus;
// if Sender.ClassType =TButton then FPlayerEdit2.SetFocus;
  end;
// if Key=VK_Space then Click;
  inherited;
end;
Funktioniert mit den TEdits . Ich wollte noch einen Button (Auswahl Spielort) rechts am Ende der Komponenete integrieren,(was mit deiner Beschreibung kein Problem war, auch ein eigenes Ereignis war schnell integiert),doch leider bringt dieser Button meine Cursorsteuerung durcheinandert, bei hoch und runter springt er nicht zur nächsten Komponente innerhalb der TDartResultEdit Klasse(was bei den Edits einwandfrei funktioniert) sondern auf das erste bzw. zweite Editfeld innerhalb der Subkomponenten. (Warum?).

Kann man den Text ein einem Editfeld zentrieren?

So und nun noch mal zu OnEditChance.
Die Eingabe der Edits habe ich auf Zahlen beschränkt(funktioniert). Ich muss in diesem Ereignis
1.Die Gültigkeit des eingegebenen Ergebnisses auswerten (best of)
2 Ist das Spiel durch dieses Ergebnis beendet oder läuft es noch weiter
3.Ist es ein Endergebnis (best of) dann Verlierer und Gewinner auswerten und diese in die nächste Runde springen bzw. ausscheiden lassen.

Dazu brauche ich alle TEdit.Texte und natürlich den Sender da das im meinem Programm eigentlich nur eine Routine werden soll. Was meinst du wie ich das hier am besten löse?
Du hast mir ja schon zwei eventuelle Lösungen genannt welche soll ich bevorzugen?

Da du für das Projekt Intresse hast, habe ich dir ein PrintScreen von einem Spielplan (Ist aber auch noch nicht 100% fertig) so wie er Später im LCD-Fernseher oder Leinwand zu sehen sein wird angehängt. Über die Komponente TDartResultEdit werden die Ergebnisse und die daraus folgenden Partien in diesen Spielplan eingetragen.

Sind genug Fragen auf einmal (hoffe ich werde dir nicht lästig).

Gruß Dieter

Natürlich kann sich jeder hier beteiligen der eine Lösung für meine Fragen kennt
Angehängte Grafiken
Dateityp: jpg spielplan_16spielerdoppelko_jpg_162.jpg (152,7 KB, 20x aufgerufen)
Dateityp: jpg tdartresultedit_194.jpg (16,4 KB, 16x aufgerufen)
  Mit Zitat antworten Zitat
 


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 14:54 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