Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.02.2015, 22:23

Editbox - Tabulator

Guten Abend liebes Forum.
ich arbeite zurzeit an meinem ersten kleinen WinAPI projekt und bin nun auf folgednes Problem gestoßen.
ich mochte gern, wie man es auch von vielen anderen Programmen kennt, meine Editboxen <- (ist das die mehrzah?) mit Tab verbinden.
Also wenn man Tabulator drückt das der Cursor in die nächste Editbox springt.

für wenige Editboxen =) ist das ja kein Problem das würde ich dann wie folgt regeln:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   case WM_COMMAND:
                       {
                                          switch (wParam)
                                          {
                                          case EDITBOX_ID_1:
                                          {
                                                            //Wenn TAB dann nächste Editbox
                                          }
                                          case EDITBOX_ID_2:
                                          {
                                                            //Wenn TAB dann nächte Editbox
                                          }
                                          }
                       }


Jedoch benutze ich für meine Andwednung nicht 2 Editboxen sondern ganze 81....
Was ich damit erreichen möchte ist das somit ein 9*9 Feld ensteht das der User vor dem Programmstart füllen kann.
Mit Tab geht es jedoch um einiges einfacher als jedes mal die Maus zu benutzen, um die jeweilige Editbox anzuklicken


Die einzelenen Felder sind Klassen und stehen in einem Vector. Jedoch habe ich keine möglichtkeit gefunden eine schleife hier einzubauen ohne das der Kompiler mir dutzende Fehler anzeigt....

Muss ich wirklich 81 Einträge per Hand eingeben?! es gibt doch höchstwahrscheinlich eine bessere Mehtode.

Liebe Grüße Urprimat
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Urprimat« (22.02.2015, 22:28)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

2

22.02.2015, 22:57

Ich würde es mit WinAPI Mitteln probieren statt selbst nachzuimplementieren: https://msdn.microsoft.com/en-us/library…aspx#ws_tabstop

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

23.02.2015, 06:46

Muss ich wirklich 81 Einträge per Hand eingeben?! es gibt doch höchstwahrscheinlich eine bessere Mehtode.
Natürlich gibt es die.
1) Überhaupt keine Edit-Boxen verwenden, da gibt's mit Sicherheit eine viel bessere Lösung. Bei einer EditBox muss der Nutzer immer wissen, was er reinschreiben darf/muss. Das klingt für mich eher nach einer sehr schlechten Lösung. Was soll das mal werden? Eine Art Tile-Editor? Klar ist das mehr Aufwand, aber es wäre intuitiv benutzbar.
2) Die Boxen in Schleifen selbst erzeugen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

4

23.02.2015, 16:18


1) Überhaupt keine Edit-Boxen verwenden, da gibt's mit Sicherheit eine viel bessere Lösung. Bei einer EditBox muss der Nutzer immer wissen, was er reinschreiben darf/muss. Das klingt für mich eher nach einer sehr schlechten Lösung. Was soll das mal werden? Eine Art Tile-Editor? Klar ist das mehr Aufwand, aber es wäre intuitiv benutzbar.


Wenns fertig ist soll es mal ein Sudokufeld darstellen, dass man mit Zahlen Füllen kann. Klickt man dann auf "Start" berechnet das Programm dann die restlichen Felder unter berücksichtigung der Sudoku Regeln.
Mit der Berechnung an sich bin ich fertig. Nur am richttigen Layout klemmt es.
Welche alternative zu Editboxen gibt es den sonst? ist mein erstes WinAPI Projekt und dachte das Editboxen hierfür eigentlich ideal wären.


2) Die Boxen in Schleifen selbst erzeugen.


Ich weiß jetzt nicht ob ich dich falsch verstehe oder du vielleicht mich. Es geht nicht um die erzeugung der Boxen, diese werden schon in Schleifen erzeugt.
Es geht darum diese besagten Boxen mit [TAB] zu verbinden.
Also, dass der Cursor, um die Usereingabe zu vereinfachern, von einer Box zur anderen springt sobald man [TAB] drückt.


Ich würde es mit WinAPI Mitteln probieren statt selbst nachzuimplementieren: https://msdn.microsoft.com/en-us/library…aspx#ws_tabstop


Alles klar ich werd mich mal umschauen. Danke

Liebe Grüße Urprimat
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

23.02.2015, 16:40

Welche alternative zu Editboxen gibt es den sonst?
Numeric Updowns, Comboboxen, grafische Darstellung des Spielsfelds ohne Win32-Controls.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

23.02.2015, 16:48

Wo war denn die Rede von einem Spiel?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

23.02.2015, 16:50

Für mich ist Sudoku eine Art Spiel mit einer Art Spielfeld. Sorry, falls Du das anders siehst. Stell Dir in diesem Fall einfach ein anderes Wort vor. Oder gab's jetzt außer einem Streit über das Wort "Spielfeld" noch irgendwas handfestes, was gegen eine grafische Darstellung sprechen würde - ein echtes Argument quasi? Ich bin für alles offen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

8

23.02.2015, 17:02

Achso soll ein Sudoku sein. Gut, hab ich übersehen, du liest doch sicher auch nicht alles gründlich, oder ;)
Übrigens wirst du so langsam aber sicher zum König des Sarkasmus, und das war kein Sarkasmus :D

9

23.02.2015, 18:46


Numeric Updowns, Comboboxen, grafische Darstellung des Spielsfelds ohne Win32-Controls.


An Numeric Updowns & Comboboxen hatte ich auch gedacht. Jedoch kann ich mir vorstellen das der Aufwand der selbe ist um diese mit [TAB] zu verbinden.
Aber du hast recht. Somit wird ersichtlicher was jeweils in die Feder eingetragen werden muss. Zur zeit arbeite ich mit einer Syntaxüberprüfung sobald man "Start" drückt.

Grafische Darstellung des Spielsfelds ohne Win32-Controls: Da ich mir dieses kleines Projekt ausgesucht habe um ein wening in der WinAPI zu stöbern fällt dieser Punkt weg.

Vielen Dank für die hinweise ich werd ma gucken wie mich Tabstop weiter bringt.
Hatte bis jetzt noch keine gelegenheit.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

10

23.02.2015, 20:09

Hi...


Ich würde es mit WinAPI Mitteln probieren statt selbst nachzuimplementieren: https://msdn.microsoft.com/en-us/library…aspx#ws_tabstop


ich scheitere leider an der umsetzung da ich nicht richtig weiß wie ich an die sache herran gehen soll.

Als erstes Setze ich den beim erstellen meiner Editboxen WS_TABSTOP. das sieht dann bei mir so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
hEditBox = CreateWindow(
        TEXT("EDIT"),
        TEXT("0"),
        WS_VISIBLE | WS_CHILD | WS_TABSTOP | ES_CENTER,
        X * 30, Y * 30,
        20, 20,
        *hWnd,
        (HMENU)ID,
        *hInst,
        NULL);



Jetzt steht ja in deinem Link ja:

When the user presses TAB or SHIFT+TAB, the system first determines whether these keys are processed by the control that currently has the input focus. It sends the control a WM_GETDLGCODE message, and if the control returns DLGC_WANTTAB, the system passes the keys to the control.

Das ist ja für mich uninteressant da ich ja gerade nicht das Keydown üer die Nachrichtenschleife abfange.

Otherwise, the system uses the GetNextDlgTabItem function to locate the next control that is visible, not disabled, and that has the WS_TABSTOP style. The search starts with the control currently having the input focus and proceeds in the order in which the controls were created—that is, the order in which they are defined in the dialog box template. When the system locates a control having the required characteristics, the system moves the input focus to it.

Somit ist ja das für mich interessant. jedoch weiß ich nicht ganz wie ich GetNextDlgTabItem benutzen soll....
sry vllt stell ich mich gerade etwas doof an jedoch haben mir weitere Internet recherchen nicht alzu sehr weiter geholfen.... wobei auch meine internet Geschwindigkeit eine große rolle spielt....
bin gerade ein halbes Jahr in Ghana und darf mich hier an Steinzeit Sateltieten Internet gewöhnen...
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

Linus Torvalds

Werbeanzeige