![]() |
mit den Cursortasten zum nächstliegen Control springen
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 |
Re: mit den Cursortasten zum nächstliegen Control springen
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 |
Re: mit den Cursortasten zum nächstliegen Control springen
Puh, man kann auch über Moskau von Hamburg nach München fahren.
Schick an das übergeordnete Fenster die Nachricht ![]() |
Re: mit den Cursortasten zum nächstliegen Control springen
Das ist aber nicht das, was der TE will :zwinker:
|
Re: mit den Cursortasten zum nächstliegen Control springen
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 |
Re: mit den Cursortasten zum nächstliegen Control springen
Die Variante, die Blup beschriebt ist doch gut.
Wo liegen deine Schwierigkeiten bei dieser Variante? |
Re: mit den Cursortasten zum nächstliegen Control springen
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:
Nun kannst deren Position bestimmen
#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; } |
Re: mit den Cursortasten zum nächstliegen Control springen
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 :oops: . Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
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 |
Re: mit den Cursortasten zum nächstliegen Control springen
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 ... |
Re: mit den Cursortasten zum nächstliegen Control springen
Ich habe mir darüber gedanken gemacht, ob man mit Findcomponent und der Abfrage noch dem Typ der Komponente sowie mit dem Vorschlag von Blup mit der Tag Eigenschaft, wenn nötig könnte man auch PosX/PosY (aber das hat man eigendlich schon mit Left/Top) als Eigenschaft in die Kombo mit einfließen lassen, irgendwie ans Ziel kommen könnte. Bin aber immer noch nicht zu einem positiven Ergebnis gekommen, tue mich sehr schwer mit der Positionsauswertung der einzelnen Kombos und weis nicht wie ich da rangehen soll, oder sehe ich den Wald vor lauter Bäumen nicht.
Aber Danke, dass ihr euch immer noch mit meinem Problem beschäftigt. Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Dafür ist es ja eine Community :)
Also so kannst du deine Komponenten iterieren und deren Position zur Form bestimmen
Delphi-Quellcode:
Hab das jetzt mal beispielsweise für ein Edit gemacht. Musst du natürlich auf deine Komponenten überarbeiten. Wenn du das OO machen willst, musst du über eine Liste verfügen, die über alle instanzierten Objekte bescheid weiß. Da wäre es vielleicht sogar besser wenn du über diese Klasse dann sogar die gesamte Erstellung der Komponenten auf der Form regelst und ihr die Darstellungs- und Verwaltungsintelligenz überträgst.
var
i: Integer; begin for i := 0 to Self.ComponentCount - 1 do if Self.Components[i].ClassType = TEdit then ShowMessage(IntToStr(TEdit(Self.Components[i]).Left)); end; Edit: Zitat:
Edit2: Mal nur reinweg zum probieren geht das auch so
Delphi-Quellcode:
var
i: Integer; o : TObject; begin o := nil; for i := 0 to Self.ComponentCount - 1 do if Self.Components[i].ClassType = TEdit then begin if TEdit(Self.Components[i]).Left > TButton(Sender).Left then if o = nil then o := Self.Components[i] else if TEdit(Self.Components[i]).Left < TEdit(o).Left then o := Self.Components[i]; end; ShowMessage(TEdit(o).Text); end; |
Re: mit den Cursortasten zum nächstliegen Control springen
Danke für den Source Lars, werden mich gleich mal ans ausprobieren machen. Leider muss ich dann wieder weg und kann mich erst Morgen wieder melden.
Gruss Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo ich hoffe ihr seit noch da.
Lars dein Source funtioniert in soweit,das der Button den Focus in das nächstliegende Edit nach rechts springen lässt, in abhängigkeit der For- Schleife. Zitat:
Delphi-Quellcode:
mit diesem Bereich weis ich einfach nicht wann er angesprungen wird und wann nicht. Ich werde versuchen mit den Cursortasten eine Art Steuerung hinzubekommen. Oder hast du auch dafür eine schon eine Idee, denn über TObject das ganze zu probieren, wäre ich nicht gekommen.
else
if TEdit(Self.Components[i]).Left < TEdit(o).Left then o := Self.Components[i]; Ich sag ja ich muss noch viel lernen. Dieter |
Re: mit den Cursortasten zum nächstliegende Control springen
Hallo,
Ich muss diesen Thread nochmals aufnehmen da Ich einfach nicht weiterkomme. Ich habe die Vorschläge von oben in meiner Komponente im Keydown Ereignis (welches ich überschreibe) versucht umzusetzen. Es funktioniert soweit, dass ich mit den Cursortasten sowohl rechts als auch links jeweils an die oberste Komponente gesprungen wird. Hoch und runter funktioniert nur wenn die Komponenten in der Tab-Reihenfolge stehen und Enabled sind, ist auch nur eins davon nicht Enabled bleibt der Focus hängen. Vielleicht kann jemand mal auf meinen Text schauen und hat eine Idee für mich, zumindest, dass der Focus nicht hängen bleibt sonder zum nächsten gesprungen wird.
Delphi-Quellcode:
Gruß Dieter
////////////////////////////////////////////////////////////////////////////////
// Die neuen Tastatur Ereignisse // procedure TPlanGame.KeyDown(var Key: Word; Shift: TShiftState); var iii, xxx, aaa : integer; obj: tObject; break:Boolean; begin obj:=nil; xxx:=1; // break:=false; for iii :=0 to Parent.ComponentCount-1 do if Parent.Components[iii].classtype=TPlanGame then begin if TPlanGame(Parent.Components[iii]).enabled and TPlanGame(Parent.Components[iii]).Visible then begin case Key of vk_Right:begin if TPlanGame(Parent.Components[iii]).Left > Left then if obj=nil then obj:= Parent.Components[iii] else begin if (TPlanGame(Parent.Components[iii]).Left < TPlanGame(obj).Left) then obj:=Parent.Components[iii]; if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii]; end; end; vk_Left:begin if TPlanGame(Parent.Components[iii]).Left < Left then if obj=nil then obj:= Parent.Components[iii] else begin if (TPlanGame(Parent.Components[iii]).Left > TPlanGame(obj).Left) then obj:=Parent.Components[iii]; if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii]; end; end; vk_Down:begin if TPlanGame(Parent.Components[iii]).TabOrder = TabOrder+xxx then obj:=Parent.Components[iii]; end; vk_up:begin if TPlanGame(Parent.Components[iii]).TabOrder = TabOrder-xxx then obj:=Parent.Components[iii]; end; end; end; end; if obj=nil then exit else if TPlanGame(obj).Enabled and TPlanGame(obj).Visible then TPlanGame(obj).Setfocus; inherited; end; //=== |
Re: mit den Cursortasten zum nächstliegen Control springen
Solange du selbst nicht beschreiben kannst, nach welcher eindeutigen Regel ein anderes Steuerelement ausgewählt werden soll, kann man dafür auch kein Programm schreiben.
Das ausgewählte Steuerelement ist bekannt. Ermittle den entsprechenden Knoten im Baum. Wähle nach der gewünschten Funktionalität den nächsten Knoten aus. Ermittle das entsprechende Steuerelement. Den Fokus setzen dürfte klar sein. |
Re: mit den Cursortasten zum nächstliegen Control springen
Ich schau mir das heut Mittag oder Nachmittag mal an. Ist gerade noch zu früh.
TObject habe ich verwendet, da es die "Mutter" aller Klassen ist und somit auch die Superklasse aller von ihr abgeleiteten Klassen, kann sie auch alle (dank der Polymorphie) in direkter Vererbungslinie stehenden Klassen beherbergen. Dann solltest du zur Übersicht vielleicht noch eine Variable vom Typ TPlanGame erstellen und in jeder Schleife einmal variable := TPlanGame(Parent.Components[iii]); Und dann darauf jeweils zugreifen mit variable.left usw. Das macht alles etwas übersichtlicher. Dann zu meinem obigen Quelltext. Es hat mir lediglich das Edit genannt welches am nähesten Rechts von dem Button ist. Vielleicht solltest du alle deine Objekte aus der Taborder nehmen und diesen einfach den Fokus zuweisen mit ![]() Edit: Rechtschreibfehler entfernt. |
Re: mit den Cursortasten zum nächstliegen Control springen
Zitat:
|
Re: mit den Cursortasten zum nächstliegen Control springen
hallo Blub,
Zitat:
was ich bis jetzt erreicht habe, ist das das oberste element rechts bzw. links angesprungen wird und dann mit den Auf/Ab tasten zum Element gesprungen werden kann. Nur wenn ein Elenemt bei auf und ab nicht Enabled ist bleibt es auf den aktiven Elenemt hängen, und das ist nätürlich nicht ackzeptabel da die darunterliegenden Elemente nie erreicht werden können.Die weitere Problematik besteht darin, dass diese Steuerung innerhalb der Komponente TPlanGame integriert wurde. Hallo quendolineDD, danke dass du dich damit beschäftigen willst. Gruss Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Eventuell wäre eine Visualisierung hilfreich.
Das du nur auf die obersten Komponente des Planes springst kommt daher, das du dem Parent den Fokus gibst. Du müsstest dann innerhalb des nächsten TPlanGame das gewünschte Unterelement noch direkt anvisieren. Wenn ich mich nicht vertan habe, ist das hier selbiger Code wie oben nur etwas übersichtlicher. Auch nutze ich eine andere Technik der Einrückung.
Delphi-Quellcode:
Edit: inherited sollte schon noch in der Prozedur liegen :oops:
var
i: Integer; TmpObj, TPGObj : TPlanGame; begin TmpObj := nil; for i := 0 to Parent.ComponentCount - 1 do if Parent.Components[i].ClassType = TPlanGame then begin TPGObj := Parent.Components[i]; if TPGObj.Enabled and TPGObj.Visible then case Key of VK_RIGHT : begin if TPGObj.Left > Self.Left then if Obj = nil then TmpObj := TPGObj else begin if TPGObj.Left < TmpObj.Left then TmpObj := TPGObj else if TPGObj.Left = TmpObj.Left then if TPGObj.Top < TmpObj.Top then TmpObj := TPGObj; end; end; VK_LEFT : begin if TPGObj.Left < Self.Left then if TmpObj = nil then TmpObj := TPGObj else begin if TPGObj.Left > TmpObj.Left then TmpObj := TPGObj else if TPGObj.Left = TmpObj.Left then if TPGObj.Top < TmpObj.Top then TmpObj := TPGObj; end; end; VK_UP : begin if TPGObj.TabOrder = Self.TabOrder - 1 then TmpObj := TPGObj; end; VK_DOWN : begin if TPGObj.TabOrder = Self.TabOrder + 1 then TmpObj := TPGObj; end; end; end; if TmpObj <> nil then if TmpObj.Enabled and TmpObj.Visible then TmpObj.SetFocus; inherited; end; |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo quendolineDD,
du hast recht dein Code sollte die selbe funktion haben wie meiner. Zitat:
Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo,
den Index des Arrays Components kannst du per Code verändern, z.B.:
Delphi-Quellcode:
eventuel hilft Dir das ja weiter.
Button3.ComponentIndex := 0;
Eine Komponente in den Hintergrund oder Vordergrund bringen verändert nicht den Index. Zitat:
|
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo Lannes,
danke für den Tip mit Componentindex, ich werde mal sehen ob mich das weiterbringt. Einen Screenshot kann ich dir erst morgen mitbringen da ich zur Zeit bei der Maloche bin und Delphi und das Programm auf meinem Privatrechner sind. |
Re: mit den Cursortasten zum nächstliegen Control springen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Lannes,
vor lauter testerei Gestern habe ich den Printscreen vergessen, deshalb habe ich schnell einen schematischen Turnierplan für 16 Spieler erstellt, hier kann man die Anordnung der einzelnen Komponenten sehen. Jede Komponente stellt eine Partie mit zwei Spielern dar. Die Änderung des Komponentenindexes hat nichts gebracht. Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo zusammen,
also so langsam gebe ich diese Cursorsteuerung auf, ich habe jetzt noch mal zwei Abende probiert und getestet und scheitere immer noch beim überspringen der Komponenten(bei VK_Up,VK_Down) welche nicht Enabled sind. Entweder ich stehe voll auf dem Schlauch oder ich bin einfach nur zu doof um eine Lösung zu finden. Dass bei Rechts und Links immer das oberste Element angesprungen wird(Enabled wird hier berücksichtigt) damit könnte ich leben; nur dass bei Rauf und Runter der Focus hängen bleibt, wenn ein Element gesperrt ist, damit kann ich nicht leben, denn dann erreiche ich manche Elemente nicht. Von euch scheint auch keiner mehr eine Idee zu haben wie man das lösen könnte. Gruss Dieter |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo,
nur über die Koordinaten der Elemente wird das schwierig bis unmöglich eine exakte Steuerung hinzubekommen. Ich denke das das Element wissen muss welches Element(z.B. ComponentIndex) bei welcher Taste angesteuert werden muss. Um bei diesen Spielplänen eine exakte Steuerung zu realisieren würde ich: Entweder dazu ein Referenz-Array benutzen, in dem der jeweilige ComponentIndex des Elements vorbelegt wird, zu dem gewechselt werden soll. Das Array muss dann zum einen die Dimension der Summe der Elemente und in der zweiten Dimension für jede Richtung ein Feld enthalten.
Code:
Der Zugriff vereinfacht:
Beispiel -------
-Spielplan: | 0 | ------- const REF : Array [0..8,0..3] of Integer = ------- ------- ((1,-1,2,4), //0 | 1 | | 2 | (3,-1,0,6), //1 ------- ------- (1,-1,5,7), //2 ------- ------- ------- (-1,-1,1,-1), //3 | 3 | | 4 | | 5 | (1,0,2,8), //4 ------- ------- ------- (,,,), ------- ------- (,,,), | 6 | | 7 | (,,,), ------- ------- (,,,)) ------- | 8 | -------
Delphi-Quellcode:
Bzgl. Enabled etc. kannst Du ja prüfen und gegebenenfalls über das Referenz-Array das nächste anzusteuernde Element ermitteln,
i := ComponentIndex;
case Key of VK_LEFT : TGameElem(TGame.Components[REF[i,0]]).SetFocus; VK_UP : TGameElem(TGame.Components[REF[i,1]]).SetFocus; oder bis es auf einen Index -1 trifft und dann den Focus nicht setzt. Angenommen Element 0 hat den Focus, Key ist VK_DOWN und Element 4 ist disabled. => Im Feld [0,3] ist der Hinweis auf den Index 4 => Element 4 ist disabled => im Feld [4,3] ist der Hinweis auf den Index 8 => prüfen, Focus auf Element 8 setzen. oder die Elemente bekommen direkt einen (Index)Zeiger auf die jeweiligen Richtungs-Elemente mit z.B. bei Element 0
Delphi-Quellcode:
Elem.ElemIndexLeft := 1;
Elem.ElemIndexUp := -1; Elem.ElemIndexRight := 2; Elem.ElemIndexDown := 4; |
Re: mit den Cursortasten zum nächstliegen Control springen
Hallo Lars,
ich habe die Lösung gestern Abend gefunden, manchmal sieht man den Wald vor lauter Bäumen nicht. Die Lösung lag in der symetrischen Anordnung der Komponenten. Sobald ich den Code bereinigt und auskommentiert habe, stell ich die Lösung hier rein (kann allerding bis nächste Wo Dienstag dauern), damit auch ihr die Lösung habt, vielleicht kann der ein oder andere Sie ja mal gebrauchen. |
Re: mit den Cursortasten zum nächstliegen Control springen
So und hier wie versprochen die komplette Procedure, ich hoffe, dass einige von euch sie gebrauchen können, wenn jemand noch eine Verbesserung sieht oder macht gebt mir bitte Bescheid.
In die Komponente wurde eine besondere Tastatursteuerung integriert damit diese einwandfrei funktioniert ist folgendes zu beachten: 1- mit den Cursortasten kann nur innerhalb der Komponentenklasse gesprungen werden 2- mit den Cursortasten rechts und links kann jeweils auf die oberste Komponente in der nächsten Reihe rechts oder Links gesprungen werden. 3- mit den Cursortasten rauf und runter kann dann in der Reihe eine Komponente nach oben oder unten gesprungen werden.Damit dies Funktioniert müssen die Komponenten innerhalb der Reihe den gleichen X-Achsenwert (Left) haben. 4- mit der Space-Taste wird das Click-Ereignis ausgelöst. 5- die Tab-Taste funktioniert wie bisher nach der Taborder.
Delphi-Quellcode:
Gruss und Danke Dieter
////////////////////////////////////////////////////////////////////////////////
// Die neuen Tastatur Ereignisse // procedure TPlanGame.KeyDown(var Key: Word; Shift: TShiftState); var iii:integer; obj: tObject; begin obj:=nil; If (Key=vk_Right) or (Key=vk_Left) or (Key=vk_Down) or (Key=vk_up)then begin for iii :=0 to Parent.ComponentCount-1 do if Parent.Components[iii].classtype=TPlanGame then begin if TPlanGame(Parent.Components[iii]).enabled and TPlanGame(Parent.Components[iii]).Visible then //begin case Key of vk_Right: begin if TPlanGame(Parent.Components[iii]).Left > Left then if obj=nil then obj:= Parent.Components[iii] else begin if (TPlanGame(Parent.Components[iii]).Left < TPlanGame(obj).Left) then obj:=Parent.Components[iii]; if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii]; end; end; vk_Left: begin if TPlanGame(Parent.Components[iii]).Left < Left then if obj=nil then obj:= Parent.Components[iii] else begin if (TPlanGame(Parent.Components[iii]).Left > TPlanGame(obj).Left) then obj:=Parent.Components[iii]; if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii]; end; end; vk_Down: begin if (TPlanGame(Parent.Components[iii]).Left = Left) and (TPlanGame(Parent.Components[iii]).Top > Top)then if obj=nil then obj:= Parent.Components[iii] else if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top) then obj:=Parent.Components[iii]; end; vk_up: begin if (TPlanGame(Parent.Components[iii]).Left = Left) and (TPlanGame(Parent.Components[iii]).Top < Top)then if obj=nil then obj:= Parent.Components[iii] else if (TPlanGame(Parent.Components[iii]).Top > TPlanGame(obj).Top) then obj:=Parent.Components[iii]; end; end; //end; end; if obj<>nil then if TPlanGame(obj).Enabled and TPlanGame(obj).Visible then TPlanGame(obj).Setfocus; end; if Key=VK_Space then Click; inherited; end; //=== |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08: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