Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
Magico777
Newbie
Newbie

Anmeldedatum: 17.11.2009
Beiträge: 9

Befehle werden in falscher Reihenfolge ausgeführt
Verfasst am: 17.11.2009, 20:45

Hallo,

ich habe ien Problem und hoffe auf kompetente Hilfe! Smile

Ich habe ein VB6-Programm geschrieben, in welchem einem Label ein Text zugewiesen wird. Einen Befehl weiter rufe ich ein sub sprachausgabe auf (hier wird der text im label vorgelesen). Funktioniert auch alles bestens. Mit einem Haken: Obwohl der Befehl zum Text anzeigen vor dem Befehl zur Sprachausgabe steht, wird zuerst vorgelesen und danach(!) der Text angezeigt.

Kann mir da jemand einen klugen Tipp geben?

Gruß und vielen Dank vorab!!

Magico777
___________________

Code:
Private Sub Anzeige()
    lbl_Zubereitung = "Beispieltext"                   'Erst TEXT ANZEIGEN
    sprachausgabe (lbl_Zubereitung.Caption)     'Dann TEXT  VORLESEN
End Sub

Private Sub sprachausgabe(text As String)
    Dim voice As Variant
    Set voice = CreateObject("SAPI.SpVoice")
    voice.Speak text, 0
End Sub

_________________
 
muerzi
Tutorial Leser
Tutorial Leser

Anmeldedatum: 03.08.2009
Beiträge: 45
Wohnort: Leoben


Verfasst am: 18.11.2009, 08:30

Hallo

Ja, ist eine Eigenart von VB6, passiert mir auch öffters.

Ich lös es immer indem ich ein unsichtbares Formular lade und dann wieder entlade.


Code:

    Load frmTmp
    Unload frmTmp


Einfach eine neue Form die Visible = false ist
In deinem Fall also


Code:

Private Sub Anzeige()
    lbl_Zubereitung.Caption = "Beispieltext"       'Erst TEXT ANZEIGEN
    Load frmTmp
    Unload frmTmp
    sprachausgabe (lbl_Zubereitung.Caption)     'Dann TEXT  VORLESEN
End Sub

Private Sub sprachausgabe(text As String)
    Dim voice As Variant
    Set voice = CreateObject("SAPI.SpVoice")
    voice.Speak text, 0
End Sub


meld dich ob's funktioniert hat!

mfg
 
Magico777
Newbie
Newbie

Anmeldedatum: 17.11.2009
Beiträge: 9

Kein Erfolg...leider!
Verfasst am: 18.11.2009, 16:24

Hallo,

erstmal DANKE Very Happy für Deine Hilfe!!!

Leider hat Dein Vorschlag zu keinem veränderten Ergebnis geführt. Es wird immer noch erst vorgelesen, dann angezeigt. Irgendwie kann ich mir das nicht erklären...

Grüßr

Magic0777
 
muerzi
Tutorial Leser
Tutorial Leser

Anmeldedatum: 03.08.2009
Beiträge: 45
Wohnort: Leoben


Verfasst am: 19.11.2009, 08:57

Hallo

Vermute mal du rufst die Sub "Anzeige()" dann auf wenn du einen Knopf drückst.
Lieg ich da richtig?

Wenn ja: dann dann gib die Sub "sprachausgabe("xyz") " als nächsten Befehl nach "Anzeige()" beim Klickereignis deines Buttons.
Wenn nein: bevor du in der Sub "Anzeige()" die Sub "sprachausgabe()" aufrufst einfach ein
Code:

If lbl_Zubereitung.Caption <> "" Then
     sprachausgabe (lbl_Zubereitung.Caption)
End If


einfügen.

mfg
 
Magico777
Newbie
Newbie

Anmeldedatum: 17.11.2009
Beiträge: 9


Verfasst am: 19.11.2009, 16:29

Hi,

zuerst: Du vermutest richtig, ich rufe das sub anzeige() auf knopfdruck auf.

zu 1) Ich habe versucht den Aufruf der sprachausgabe aus dem sub anziege() heruaszunehmen und direkt hinter den aufruf in das Klick-Ereignis des knopfes zu setzen. Ergebnis: Keine Veränderung! Sad

zu 2) ich hab das ganze in die vorgeschlagene if Abfrage gesetzt. Ergebnis: Keine Veränderung! Sad

Ich verstehs nicht. Mit dem nächsten Ereignis schon weitermachen bevor ein anderes zu ende ist ok, aber ein Ereignis erst nach einem anderen ausführen, obwohl des davor steht (und ja auch die inhaltlische Basis ist). Das versteh ich nit...

Gruß
 
christopher.g
Überflieger
Überflieger

Anmeldedatum: 03.05.2008
Beiträge: 536


Verfasst am: 20.11.2009, 08:05

probier mal die delay funktion
vl bringt die ja was
 
Magico777
Newbie
Newbie

Anmeldedatum: 17.11.2009
Beiträge: 9

Ein funktionierender Workaround!
Verfasst am: 20.11.2009, 19:36

Hallo,

danke für Deinen Tipp. Mal davon abgeshen, dass eine "Delay-Funktion" in VB ja eigentlich nicht gibt, hab ich mir einfach selber ne simple gebaut.

Code:
Option Explicit

Public Declare Function GetTickCount Lib "kernel32" () As Long

Public Sub Delay(nSekunden As Long)
  Dim TimeOut As Long
  TimeOut = (GetTickCount / 1000) + nSekunden
  Do
    DoEvents
  Loop Until TimeOut < (GetTickCount / 1000)
End Sub


Fazit: Der Woraround funktioniert. Ich kann die korrekte Reihenfolge wieder herstellen! Einen Dank für Deine Idee!

alledings interssiert mich immer noch, wie ein solches Verhalten zustandekommt und ob man es auch auf andere Weise (also Beseitigung der Ursache, nicht Heilung der negativen Auswirkung) lösen kann.

Gruß

Magico777
_________________


 
muerzi
Tutorial Leser
Tutorial Leser

Anmeldedatum: 03.08.2009
Beiträge: 45
Wohnort: Leoben


Verfasst am: 23.11.2009, 07:45


Hallo

Das würd mich auch sehr interessieren.
Dachte immer das Programmieren logisch sei,
aba das hat nichts mit Logik zu tun.

Würd echt zu gern wissen was die sich da gedacht haben beim
programmieren der IDE
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: befehle, reihenfolge, befehl, sprachausgabe, ausgeführt, voice

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Keygen - Hilfe bitte 1035 29.08.2007, 09:38
Keine neuen Beiträge Screenshot , hilfe ;) Speichern bzw jo 646 27.05.2007, 09:30
Keine neuen Beiträge hilfe bei ini maker 658 30.04.2007, 21:26
Keine neuen Beiträge [VB] suche hilfe beim 1. projekt 799 02.04.2007, 00:39
Keine neuen Beiträge proxy checker hilfe 929 30.03.2007, 09:21
 



[ Time: 0.3304s ][ Queries: 111 (0.0283s) ][ GZIP on - Debug on ]