Label oder etc. mit Pfeiltasten bewegen!


Shooter07

Grünschnabel
hi alle zusammen :) ich hätte mal wieder ne frage! Wie kann ich eine Label z.B mit Hilfe der Pfeiltasten bewegen, wie Lese ich die Tastaur aus? Gibs so was wie GetKey ? also das man das Label um 1 pixel verschiebt :confused:


plz mit Quellcode ;D


Danke Im vorraus :)
 

Dario Linsky

Erfahrenes Mitglied
Hi,

die VCL hab ich zwar immer nur mit Delphi verwendet, aber gibts für TForm nicht ein Ereignis wie KeyPress (o.ä.), auf das du reagieren kannst? In dem Fall kannst du ja einfach die Koordinaten des Labels neu setzen.

Grüße, D.
 

Shooter07

Grünschnabel
mhhh also ich habe mal so in der Hilfe mich schlau gemacht und da steht das so:

Code:
TColor FormColor;
void __fastcall TForm1::FormCreate(TObject *Sender)

{
  KeyPreview = true;
}


void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

{
  if (Key == Key_F1)
  {
    FormColor = Form1->Color;
    Form1->Color = clAqua;
  }

}

void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)

{
  if (Key == Key_F1)
    Form1->Color = FormColor;
}
aber er hat probleme wenn ich die "void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)" einsetzte :S
 

Dario Linsky

Erfahrenes Mitglied
Hi,

geh doch einfach den Weg über das Formular bzw. über den Objekt-Inspektor. Da müsstest du die Möglichkeit haben, eine Funktion für das Ereignis zuzuweisen (einfach doppelklicken :)).

Grüße, D.
 

Shooter07

Grünschnabel
aha ok :D bloß jetzt breuchte ich noch die befehele womit ich die Komponente bewegen kann 1 px oda egal wie viel pixel ^^ hauptsacht das dingen bewegt sich
;D
 

Dario Linsky

Erfahrenes Mitglied
Hi,

alle Objekte, die von TControl (?) abgeleitet sind, müssten Eigenschaften wie Top und Left haben, mit denen die Position vom Steuerelement im Formular festgelegt wird. Also einfach diese Eigenschaften ändern. ;)

C:
Label1->Left += dx; // dx Pixel nach rechts
Label1->Top -= dy; // dy Pixel nach oben
Grüße, D.
 

Shooter07

Grünschnabel
Cool danke :) aber das mit dem dx check ich nicht xD sry is aber nen bischen spät :p also wie war das noch ma ? muss ich für dx was eintragen!? :(
 

Dario Linsky

Erfahrenes Mitglied
Hi,

dx oder dy sind Platzhalter für den Versatz, um den du das Element verschieben willst. Also entweder eine Variable anlegen oder den Wert fest eintragen.

Grüße, D.
 

Shooter07

Grünschnabel
OK Dankööö ^^ und noch was kann ich das label an meinem Cursor sozusagen gefestigen also das das Label mit dem Maus Zeiger gezogen wird ? :eek:
 

Dario Linsky

Erfahrenes Mitglied
Hi,

natürlich geht auch das. Schau dir dazu am besten mal das OnMouseMove-Ereignis an (hieß glaub ich so), da müsstest du die jeweils aktuellen Mauskoordinaten kriegen. Dann setzt du einfach das Label an diese Stelle.

Um ein Label mit festgehaltener Maustaste zu ziehen, müsstest du erst mit dem OnMouseDown-Ereignis in einen aktiven Zustand wechseln (z.B. mit einer booleschen Variable), den du durch das OnMouseUp-Ereignis wieder verlässt.

Grüße, D.
 

Dario Linsky

Erfahrenes Mitglied
Naja, klingt jetzt vielleicht etwas schwer, ist es aber eigentlich gar nicht. Sind ja nur zwei zusätzliche Funktionen mit einem Einzeiler. :)

Ja, ICQ hab ich, geb ich aber nicht raus. Für Support ist das Forum da. ;)

Grüße, D.
 

Shooter07

Grünschnabel
uhhh ;) Undercover ^^ naja danke erst mal ich werde erst mal schlafen gehen ^^ und morgen/heute weiter machen ;D man schreibt sich :)
 

Shooter07

Grünschnabel
Könntest du mir vllt nen Code schreiben wie man auf Button1 die Tastatur KeyUp legen kann?

also wenn Button1 per KeyUp (Pfeiltaste nach Oben) gedrückt wird soll sich das Label1 nach oben verschieben!

wäre sehr Hilfreich ;D
 

Dario Linsky

Erfahrenes Mitglied
Hi,

im KeyUp-Ereignis (KeyPress wäre m. M. n. besser, weil KeyUp nur auf das Loslassen der Taste reagiert) hast du als Parameter an die Funktion den Code der gedrückten Taste. Mit einer ASCII-Tabelle lässt sich doch sicher heraus finden, welchen Code die Pfeiltasten haben.

Du musst also nur noch mit einer switch-Anweisung die gedrückte Taste mit den Pfeiltasten vergleichen.

C:
switch(KeyCode)
{
    case ARROW_UP:
        Label1->Top -= 1;
        break;
    case ARROW_DOWN:
        // ...
}
Du müsstest mal nachschlagen, ob die Variablennamen und Konstanten tatsächlich so heißen. Hab mich seit Jahren nicht mehr mit der VCL beschäftigt. :rolleyes:

Grüße, D.