Formulare: Steuerelement-Gestaltung

Ein gutes Neues zunächst!

Und schon gleich habe ich wieder Fragen:

  1. Ich habe eine Userform mit vielen Images mit Bildern drin (ein Kartenspiel).
    Jedes Image (Karte) kann man verschieben. Ich möchte, dass dieses beim Schieben immer im Vordergrund ist, also über den anderen liegt. Schaffe ich nicht. Wie geht’s?
  2. Kann man Töne ausgeben, wenn die Userform sichtbar ist, und man etwas macht, was z.B. fehlerhaft ist? Ich habe „Play“ und „Import“ in der Hilfe gefunden, die soll man aber nicht verwenden. Schön wäre eine beliebige Tonfolge. Die in Windows definierten Sounds tun es aber auch.

Danke
Laika

Ein gutes Neues zunächst!

dir auch, erstehünd in ImWeltraum

Und schon gleich habe ich wieder Fragen:

  1. Ich habe eine Userform mit vielen Images mit Bildern drin
    (ein Kartenspiel).
    Jedes Image (Karte) kann man verschieben. Ich möchte, dass
    dieses beim Schieben immer im Vordergrund ist, also über den
    anderen liegt. Schaffe ich nicht. Wie geht’s?

Versuch mal Folgendes:
Ich vermute du benutzt das MouseDown-Ereignis. In der Prozedur dafür musst du die Eigenschaft Backstyle alle anderen Images auf 0 (frmBackStyleTransparent) setzen.
Dann könnte es klappen.

  1. Kann man Töne ausgeben, wenn die Userform sichtbar ist, und
    man etwas macht, was z.B. fehlerhaft ist? Ich habe „Play“ und
    „Import“ in der Hilfe gefunden, die soll man aber nicht
    verwenden. Schön wäre eine beliebige Tonfolge. Die in Windows
    definierten Sounds tun es aber auch.

Mit der Windows API playsound sollte es gehen:
Private Const SND_ASYNC = &H1 ’ play asynchronously
Private Const SND_FILENAME = &H20000 ’ name is a file name

Private Declare Function PlaySound Lib „winmm.dll“ Alias „PlaySoundA“ (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Sub ton()
PlaySound „C:\WINDOWS\MEDIA\TADA.WAV“, ByVal 0&, SND_FILENAME Or SND_ASYNC
End Sub

Danke
Laika

Gruß, Andreas

Moin Andreas,

danke für Deine Hilfen, hilft mir sehr, dafür endlich mal ein Sternchen.

Ich vermute du benutzt das MouseDown-Ereigni In der Prozedurs. …

Ja.

… dafür musst du die Eigenschaft Backstyle alle anderen Images
auf 0 (frmBackStyleTransparent) setzen.
Dann könnte es klappen.

Nein, klappt nicht. Auch wäre es etwas aufwendig, 50 Objekte in den Transparent-Modus zu schalten.
Ich habe es mit object.Visibility = False probiert, dann wird das unten liegende Objekt unsichtbar, das oben liegende ist (alleine) sichtbar. Dazu müsste ich aber den Objekt-Verweis zum unteren Objekt kennen, was nicht ganz einfach zu machen ist. Ich habe probiert, alle Objekte in einer Liste Objekte(anzahl) mit Set Objekt(nummer) = Imagexx zu speichern und später darauf zuzugreifen … gibt einen „schweren Fehler“.
Muss halt noch ein bisschen rumspielen … wenn ich Zeit habe.

Mit der Windows API playsound sollte es gehen:

Klappt gut! Habe inzwischen auch etwas gegoogelt und Einiges gefunden.

Gruss
Laika

Moin Andreas,

Hallo Laika,

danke für Deine Hilfen, hilft mir sehr, dafür endlich mal ein
Sternchen.

Danke.

… dafür musst du die Eigenschaft Backstyle alle anderen Images
auf 0 (frmBackStyleTransparent) setzen.
Dann könnte es klappen.

Nein, klappt nicht.

OK, dann neuer Versuch: Probier mal, die Eigenschaft ZOrder des Labels, den du bewegen willst im MouseDown-Ereignis auf 0 zu setzen. Sieh dir dazu auch die VBA-Hilfe an.

Gruss
Laika

Gruß, Andreas

1 Like

N’abend nochmal,

Probier mal, die Eigenschaft ZOrder
des Labels, den du bewegen willst im MouseDown-Ereignis auf 0
zu setzen.

Das war genau das was ich suchte. Funktioniert bestens. msoBringToFront ist die 0.

Sieh dir dazu auch die VBA-Hilfe an.

Hmm, ich bin vielleicht zu dumm für sowas. Jedenfalls finde ich die VBA-Hilfe schlecht. Häufig wird alles mit einem gewaltigen Brimborium drum herum und für ziemlich komplexe Gebilde beschrieben.

Egal wie, danke nochmal

Gruss
Laika

Hallo laika,

ich gebe zu: In Excel 2003 war die VBA-Hilfe um Äonen besser. In Excel 2007/2010 ist es eher Glücksache, ob man eine brauchbare Antwort findet. Es kann passieren, dass man einen Begriff im Code markiert und F1 drückt, die Hilfe öffnet sich und sagt, dass sie nichts gefunden hat. Dann gibt man exakt den selben Begriff im Suchfeld ein, und es kommen mehrere Ergebnisse. Ich hatte auch schon den Effekt, dass sich beim Klick auf einen Begriff eine Internet-Seite von MS öffnete und mir sagte, dass es diese Seite nicht gibt. Toll!!
Anyhow. machmal hat mal Glück und es kommt (wie bei ZOrder) eine brauchbare Hilfe. Darauf bezog ich mich.

Gruß, Andreas

Hallo Andreas,

ich gebe zu: In Excel 2003 war die VBA-Hilfe um Äonen besser.

Und das habe ich noch! Mehr aus Faulheit habe ich bisher noch nicht gewechselt. Es genügte meinen Ansprüchen ja. Aber Du lieferst mir noch einen Grund!

Unabhängig davon muss ich mich in Zukunft wohl doch mal etwas mehr bei meinen Recherchen in der (Online-) Hilfe bemühen. Eine Frage im w-w-w zu stellen ist halt sehr einfach :wink:)
Ab und zu bemühe ich mich, auch mal eine Frage zu beantworten.

Gruss
Laika