Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Eigenschaften von Selektion zurücksetzen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Eigenschaften von Selektion zurücksetzen (2796 mal gelesen)
geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 02. Okt. 2012 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

mal eine kurze Frage: Gibt es Möglichkeit die Grafikeigenschaften (inkl. Anwenden auf Kinder) per Makro auszuführen? Also abgesehen vom Startcommand..

Gruß

------------------
Seid nicht dumm, lest drin rum!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 02. Okt. 2012 12:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hatte jetzt zwei Ideen:

1) Die einzelnen Eigenschaften manuell auf einen von mir gewählten Standardwert setzen (Farbe, Transparenz, Linienstärke usw..) -> Anwendung auf Kinder? (großer Aufwand?)

2) Das Fenster per Startcommand aufrufen und mit der Win32 API die Checkbox setzen und "OK" klicken..

Edit: Habs hinbekommen, hier Variante (2) mit anschließender Änderung der Linienstärke:

Code:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const WM_GETTEXT = &HD
Const BM_CLICK = &HF5&
Const BM_SETCHECK = &HF1
Const BST_CHECKED = &O1
Const BST_INDETERMINATE = &O2
Const BST_UNCHECKED = &O0
Dim Text As String

Sub CATMain()

Dim selection1 As Selection
Dim vispropertyset1 As VisPropertySet

Set selection1 = CATIA.ActiveDocument.Selection
Set vispropertyset1 = selection1.VisProperties

Text = ""
CATIA.StartCommand ("Eigenschaften zurücksetzen")
Sleep 500
CATIA.RefreshDisplay = True
F_hwnd = FindWindow(vbNullString, "Eigenschaften zurücksetzen")
Text = "Anwenden auf Kinder"
EnumChildWindows F_hwnd, AddressOf EnumChildWindow, 0
Text = "OK"
EnumChildWindows F_hwnd, AddressOf EnumChildWindow, 0
vispropertyset1.SetRealWidth 1, 1
   
End Sub

Function EnumChildWindow(ByVal hChild As Long, ByVal lParam As Long) As Long

    Dim iClass As String
    Dim iText As String
    Dim j As Integer
   
    iClass = Space(256)
    j = GetClassName(hChild, iClass, 63)
    iClass = Left(iClass, j)
    iText = Space(256)
    j = SendMessage(hChild, WM_GETTEXT, 255, iText)
    iText = Left(iText, j)
   
    Select Case iText
   
        Case "Anwenden auf Kinder"
       
            If iText = Text Then SendMessage hChild, BM_SETCHECK, ByVal CLng(BST_CHECKED), ByVal CLng(0)
       
        Case "OK"
           
            If iText = Text Then SendMessage hChild, BM_CLICK, 0, 0
       
    End Select
   
    EnumChildWindow = 1
   
End Function


------------------
Seid nicht dumm, lest drin rum!

[Diese Nachricht wurde von geekv5 am 02. Okt. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 27. Nov. 2012 18:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

melde mich mal wieder zurück, nachdem ich viel zutun hatte in letzter Zeit..

Leider funktioniert mein Makro doch nicht wie gedacht und es ist so verrückt, dass ich mit meinem Latein komplett am Ende bin..

Und zwar klappt die Anwendung auf Kinder einfach nicht.. Die CheckBox wird optisch gecheckt und wenn ich den Status auslese ist sie auch gecheckt, allerdings ist sie es wohl doch nicht (Eigenschaften der Kinder werden nicht zurückgesetzt).. Wenn ich nach dem automatischen Setzen der CheckBox das Makro stoppe und per Hand nochmal drauf klicke und dann manuell auf OK klicke klappt es..

Kurz um, wie kann es sein, dass die CheckBox optisch wie gecheckt aussieht, via BM_GETSTATE den Status checked zurückgibt, aber es in Wirklichkeit gar nicht ist???

Solltet ihr eine Lösung parat haben, habe ich ein nettes Makro für euch, wofür ich das Zurücksetzen brauche.. 

Gruß
ein verzweifelter geek ^^

------------------
Seid nicht dumm, lest drin rum!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 28. Nov. 2012 09:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Gib ihm mal die Chance für ein DoEvents und mach dann noch einmal ein RefreshDisplay.

Allgemein halte ich eine Schleife mti DoEvents für besser als eine Sleep()-Operation.

Ansonsten sieht Dein Code witzig aus, wäre mir aber zu Fehleranfällig um ihn produktiv zu schalten. - weiß nicht wie Alternativenlos die Geschichte ist

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 28. Nov. 2012 14:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Lila,

das Problem ist ja, wenn ich direkt nach dem das Makro die CheckBox geklickt hat stoppe und mir das Fenster anschaue, ist ja die CheckBox geklickt.. Wenn ich den Status an der Stelle auslese sagt der auch checked.. Jetzt klicke ich per Hand auf ok und es ist als ob die CheckBox nicht gecheckt gewesen wäre.. Eigentlich funktioniert ja alles, aber auch wiederum nicht.. 

P.S.

Wenn mein Code schon nicht funktioniert, hat er wenigstens bei dir für Unterhaltung gesorgt, ist doch auch schon mal was 

------------------
Seid nicht dumm, lest drin rum!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 28. Nov. 2012 17:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Habe keine Lust mir nen Testfall dafür zu bauen, könntest Du daher einmal

Code:

If iText = Text Then
Call SendMessage (hChild, &HF1, &H1, ByVal 0&)
End If

versuchen?

Ich verstehe leider auch Deine TypeCasts nichts, wenn Du doch schon Konstanten verwendest. :-(

Auch Deine globale Variable Text hätte ich besser benannt, hatte mir nen Wolf nach der Variable in der Methode gesucht... :-(

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 29. Nov. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 28. Nov. 2012 18:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Habs probiert und bekomme das selbe Ergebnis, Box optisch gecheckt aber erst "richtig" gecheckt, wenn ich nochmal drauf klicke.. Werde nochmal ein Testbeispiel erstellen..

------------------
Seid nicht dumm, lest drin rum!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 29. Nov. 2012 09:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Schade :-(

Wie wäre es wenn Du die Checkbox selektierst und dann die Leertaste via SendKeys() schickst?

Edit: Ein Kollege meinte gerade, im QTP nutzen wir in solch einem Fall oft die Methode FireEvent(). Mit etwas Glück gibt's die auch im VBA oder lässt sich nachbauen, so dass man das _OnClick-Event lostreten kann.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 29. Nov. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

geekv5
Mitglied
Konstrukteur


Sehen Sie sich das Profil von geekv5 an!   Senden Sie eine Private Message an geekv5  Schreiben Sie einen Gästebucheintrag für geekv5

Beiträge: 214
Registriert: 13.07.2011

Notebook<P>MSI GX660R
Intel Core i5 460M
8GB DDR3
1GB Mobility HD5870
80GB Intel X25-M Postville
250GB HDD<P>Desktop<P>AMD Phenom II X4 965
1GB HD4890@ FirePro V8700
8GB DDR3-1600
2,5TB HDD<P>Belinea 2485 S1W 24" MVA

erstellt am: 03. Dez. 2012 13:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

SendKeys hatte ich schon probiert, aber leider kommt kein Tastendruck an.. In die Befehlszeile kann ich schreiben via SendKeys, aber wenn ein Dialogfenster offen ist, scheint es nicht zu funktionieren..

Code:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub CATMain()

CATIA.StartCommand ("Eigenschaften zurücksetzen")
CATIA.RefreshDisplay = True
Sleep 2000
SendKeys "{TAB}", True
SendKeys "{TAB}", True
SendKeys "{ENTER}", True

End Sub


Gruß

------------------
Seid nicht dumm, lest drin rum!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 03. Dez. 2012 17:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Nee ich mein nach dem SendMessage(), wenn die Checkbox aktiviert ist, noch einmal die Leertaste hinterher schieben.
Für SendKeys musste vorher das Dialogfenster aktivieren. Das kann auch schon über AppActivate() klappen.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

Stammtisch in Wolfsburg am 03.12.2012

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


Sehen Sie sich das Profil von MarkS. an!   Senden Sie eine Private Message an MarkS.  Schreiben Sie einen Gästebucheintrag für MarkS.

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 03. Dez. 2012 18:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für geekv5 10 Unities + Antwort hilfreich

Hallo zusammen,

die Lösungsansätze sind eigentlich ganz gut. Wie oben aber schon erwähnt, wird mit "BM_SETCHECK" quasi nur der Zustand geändert. Man weiß also nicht, ob da noch weitere Methoden aufgerufen werden. Ich würde daher auch versuchen, Befehle über die Tastatur zu simulieren, um dieses Problem zu umgehen. Mit "BM_GETCHECK" könnte man aber auslesen, ob der Haken gesetzt ist.

"SendMessage" sollte beim Senden der Tastaturbefehle durch "PostMessage" ersetzt werden. Habe das eben kurz mal ausprobiert und das Fenster reagiert dabei auf "Tab" und "Space". Bei "SendMessage" tut sich nichts.

Code:
 
Private Declare Function PostMessage Lib "user32.dll" _
    Alias "PostMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

Der Sleep-Befehl kann an dieser Stelle auch Probleme bereiten. Damit schläft Catia wirklich und das Fensterhandle ist evt. null. Ich würde dies in eine Schleife packen. Bei Bedarf, kann man auch noch einen Timer einbauen und über einen Timeout abbrechen.

Code:
   
hwin = 0

Do While hwin = 0
    hwin = FindWindow(vbNullString, "Eigenschaften zurücksetzen")
Loop



Gruß
  Mark

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz