AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi mit den Cursortasten zum nächstliegen Control springen
Thema durchsuchen
Ansicht
Themen-Optionen

mit den Cursortasten zum nächstliegen Control springen

Ein Thema von Optiplex · begonnen am 11. Mai 2009 · letzter Beitrag vom 2. Jun 2009
Antwort Antwort
Seite 1 von 3  1 23      
Optiplex

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

mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 11:53
Hallo DP'ler

ich bin gerade dabei ein Turnierprogramm zu erstellen, nun gibt es eine Form in dem der Turnierplan abgebildet ist, und über den die Eingaben der Ergebnisse erfolgt, jede Partie hat seine eigene Komponente. So und nun zu meinem Problem, es hat sich erwiesen, dass es leichter wäre wenn ich mit den Cursortasten von Kombo zu Kombo springen könnte unter Berücksichtigung der Richtung von den Cursortasten, das heist wenn ich die Cursortaste nach rechts drücke sollte der Focus auf die nächstliegende Partie rechts von der jetzigen springen. Leider springt zur Zeit der Focus in der Reihenfolge der Taborders was bei größen Plänen eine richtige Fleißarbeit bedeuten kann, bis man bei der richtigen Partie ist. Leider habe ich keinerlei Idee wie ich dieses Problem lösen könnte, vielleicht hat jemand einen Lösungsvorschlag oder sogar etwas Source für mich.

Gruß Dieter
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 12:25
Speichere alle Kombo in einem 2d-Array.
Wenn eine Cursortaste gedrückt wurde:
- ermittle die Position x,y der derzeit ausgewählten Kombo in diesem Array
- abhängig von der Cursortaste erhöhe/verringere x oder y
- ermittle ob die Koordinaten in deinem Array gültig sind
- wenn ja, den Focus auf die entsprechende Kombo setzen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 12:34
Puh, man kann auch über Moskau von Hamburg nach München fahren.

Schick an das übergeordnete Fenster die Nachricht MSDN-Library durchsuchenWM_NEXTDLGCTL.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 12:36
Das ist aber nicht das, was der TE will
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Optiplex

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

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 14:31
Hallo, danke für eure Vorschläge, allerdings ist nicht das dabei was ich mir vorstelle, das mit dem Array von Blup ist bei der Anzahl der verschieden Turnierarten und der Anzahl der Partien viel zu aufwendig, wenn man sich vorstellt dass bei 16 Spielern im Doppel KO System 30 einzelne Partien gespielt werden, von Drippel KO mit 128 Spielern will ich erst gar nicht reden. Ich hatte mir vorgestellt, dass ich das irgendwie in der Komponente realisieren könnte. Hat da niemand eine Idee?

Mit WM_NEXTDLGCTL von Michael kann man nur erreichen, dass zum nächsten Control gesprungen wird unter Berücksichtigung der Taborder

Dieter
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#6

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 14:41
Die Variante, die Blup beschriebt ist doch gut.
Wo liegen deine Schwierigkeiten bei dieser Variante?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 11. Mai 2009, 15:12
Wenn die Anordnung symmetrisch wäre, würde es das ganze vereinfachen. Du musst gar nicht alle Kombos in einem Array speichern.
Obwohl eine TObjectlist wäre möglich, dann könntest du über die Objektreferenz direkt auf die Komponente zugreifen und würdest auch nicht so viel Speicher mehr verbrauchen.

Zurück zu meinem Ansatz:
Mit FindWindow dein Fenster suchen und dann mit EnumChildWindows iterieren und deine Kombos zusammensuchen. Die jeweils näheste speichern und wenn dudurch bist, zu ihr hinspringen.
Edit: ob du links oder rechts suchst ist ja dann einfach zu unterscheiden

Edit2:
Mal schnell in C++ zusammengeschrieben, finde ich in meinem Fenster beide Handles der Buttons.
Code:
#include <iostream>
#include <windows.h>

using namespace std;

BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)
{
   cout << "hwnd_child = " << hwnd << endl;
   return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
   HWND wnd = FindWindow(NULL, L"Form4");;
   if(wnd != INVALID_HANDLE_VALUE)
   {
      EnumChildWindows(wnd, EnumChildProc, 0);   
   }
   system("PAUSE");
   return 0;
}
Nun kannst deren Position bestimmen
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Optiplex

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

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 12. Mai 2009, 08:07
Hallo Blup; Tyrael; Lars,
Sorry dass ich mich gestern nicht mehr melden konnte. Die Variante von Blup habe ich so verstanden, dass ich alle Kompos (die übrigens vom gleichen Typ sind) mit ihren Positionen in einen Array schreibe und dann bei Tastaturdruck entscheide zu welcher gesprungen wird. da habe ich meine Schwierigkeiten, denn ich wollte das in der Komponente machen, und weis nicht wie ich das umsetzen soll, muss allerdings auch zugeben dass ich mich mit dem Umgang von Arrays nicht so gut auskenne. ansonsten habe ich natürlich nichts gegen diese Variante( Jeder Vorschlag ist bei mir willkommen).

Tut mir leid Lars, aber C++ da kenne ich mich überhaupt nicht aus. In jedem Turnier gibt es eine gewisse symmetrische Anordnung. Dein Ansatz hört sich auf jeden Fall ebenfalls gut an, nur bei der Umsetzung habe ich meine Probleme.

Ich muss scheinbar im Umgang mit diesen ARRAYs und auch sonst noch viel lernen .

Dieter
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 12. Mai 2009, 09:28
Das mit dem Array war ja nur eine möglichst allgemeingültiger Lösungsansatz.
Wenn du die Beziehungen zwischen den einzelnen Kombos bereits in einer Baumstruktur vorliegen hast, kannst du den jeweiligen linken oder rechten Nachbarn auch daraus ermitteln.
Dafür benötigt man natürlich Kenntniss über deine Datenstruktur für den Baum.

Alternativ könnte man auch im Tag der Kombo ihre relative Position im Baum speichern.
z.B so:
Tag := x + y * 100
x := Tag mod 100
y := Tag div 100
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: mit den Cursortasten zum nächstliegen Control springen

  Alt 12. Mai 2009, 11:20
Ich hab das nur in C++ gemacht, weil ich dort schon alle Windows-Header zum benutzen habe. Auf die Win32API kannst du natürlich mit Delphi auch ebensogut wie mit VC++ zugreifen.
Mit den Handles, die du bekommst, kannst du mit GetClass schauen, ob es deine Controls sind und dann deren Position bestimmen und mit dem deiner aktuellen Komponente vergleichen. Wie das in dein aktuelles Projekt OO in die Komponenten eingebaut werden kann, kann ich dir nun auch nicht sagen.

Es gab natürlich auch in Delphi eine Methode, alle Komponenten zu iterieren, wo ich jetzt allerdings nicht drauf komme wie sie heißt ...
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 16:21 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