![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
Hallo!
Komme im Moment nicht weiter... Habe eine Subproc laufen, die den Hauptbildschirm bei bedarf neu zeichnen soll: Code:
SubClassProc If SubClassMessage(%hwnd,~WM_PAINT) ~InvalidateRect(%hWnd,0,0) ~UpdateWindow(%hWnd) EndIf EndProc ' SubClass %hWnd,1 ' SubClassing des Hauptfensters einschalten Unter Windows 7 wird das Programmfenster ohne Flackern aktualisiert, unter XP flackert dieser solange, wie die Message(s) anliegen. Beispiel: ist das Fenster maximiert und gehe auf die ausgeblendete Taskleiste, dann flackert das Fenster so lange, wie die Taskleiste sichtbar ist oder ein anderes Programmfenster z.B. über den Hauptfenster aktiv und hin- herbewegt wird. Kann mir jemand einen Tipp geben? Nach der letzten aufgetretenen Message könnte ich den Bildschirm neu zeichnen lassen, komme aber bei der Umsetzung nicht weiter. Gruß Jürgen |
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Warum musst du überhaupt neu zeichnen und wann?
Vielleicht gibt es eine viel einfachere und bessere Möglichkeit, das zu regeln.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#3 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
Muss neu zeichnen, da ich per Shellexec externe Links und Programme aufrufe. Sobald diese aktiv sind, werden Details im Hauptfenster zerstört bzw. nicht aktualisiert (man sieht z.B. ein Teil des gestarteten Programms im Hauptfenster)
Habe schon unterschiedliches ausprobiert |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Welche Details werden zerstört?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#5 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Vielleicht kannst du einen Sreenshot machen.
Zeige mal, wie es normal aussieht und was dann passiert, wenn du ein Programm startest. Welchen Code verwendest du zum Starten des fremden Programms genau?
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
|
#6 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
![]() Beispiel einer Internetseite, die ich aufgerufen und anschließend minimiert hatte. Normalerweise ist drumherum alles grau. Komischerweis gehts bei einem Minimalbeispiel: Window 0,0-640,480 WindowTitle "Testprogramm" Locate 0,0 Print "Dies ist ein Test..." ShellExec("http://www.juergenbaier.info/","",0) WaitInput |
|
|
|
|
|
#7 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Normalerweise kümmert sich ja Profan um das Neuzeichnen des Hauptfensters. Wenn du aber z.B. winexecwait verwendest wird erst nach dem Beenden der externen Anwendung neu gezeichnet, da das Programm ja stehen bleibt. Das ließe sich umgehen, indem du das Hauptfenster versteckst solange die externe Anwendung läuft, da es ja dann nicht gebraucht wird.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Ich habe mal deinen Code bei mir unter XProfan9 auf drei Betriebsystemen getestet - da wird aktualisiert.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#9 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Hallo Jürgen,
Invalidaterect und Updatewindow lösen ein WM_PAINT aus. Du bist also in Deiner eigenen Schleife gefangen. Hier mal ein Beispiel wie Du auf WM_PAINT reagieren kannst. Code:
$H Windows.ph
$H Messages.ph
STRUCT RECT = Left&,Top&,Right&,Bottom&&
STRUCT PAINTSTRUCT = hdc&,fErase&,rcPaint.RECT!,fRestore&,fIncUpdate&,rgbReserved#(32)
Declare Ende&
CLS ~GetSysColor(~Color_BTNFACE)
Var Button& = @Create("Button", %hwnd ,"ok",0,0,80,24)
SubClass %hWnd,1 ' SubClassing des Hauptfensters einschalten
WindowTitle "WM_PAINT"
ShellExec("http://www.juergenbaier.info/","",0)
WhileNot Ende&
Waitinput
EndWhile
End
SubClassProc
If SubClassMessage(%hwnd,~WM_PAINT)
Var ps# = New(PAINTSTRUCT)
~BeginPaint(%hwnd,ps#)
~BitBlt(%hdc,0,0,width(%hwnd),Height(%hwnd),%hdc2,0,0,~SRCCOPY)
~BitBlt(%hdc2,0,0,width(%hwnd),Height(%hwnd),%hdc,0,0,~SRCCOPY)
~EndPaint(%hwnd,ps#)
Dispose ps#
Set("WinProc", 0)
EndIf
EndProc
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher Geändert von Andreas Miethe (28.12.2010 um 16:30 Uhr) |
|
|
|
|
|
#10 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
@Dieter: mit Fenster minimieren hatte ich es am Anfang auch gemacht gehabt - wollte die Sache dann aber nicht den Anwender überlassen, dass er das Fenster wieder maximieren sollte.
@AHT: vielen Dank. Werde versuchen, den Quelltext so weit runterzuschränken - komme dann vielleicht drauf. Was mich ein wenig ärgert ist, dass ich das Programm unter Win7 entwickelte (welches auch geht) und für XP jetzt korrigieren muss - ist halt jetzt immer ein hin und her. |
|
|
|
|
|
|
#11 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
@Andreas: Danke, werde ich mal austesten (meine letzte Antwort war zeitgleich mit deinem Posting gewesen - hatte ich nicht gelesen)
|
|
|
|
|
|
#12 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
XProfan kennt übrigens auch einen Befehl zum Neuzeichnen: RePaint
Wenn du z.B. per API auf %hdc zeichnest/textest, empfiehlt es sich, gleichfalls auch auf %hdc2 zu zeichnen. Dann ist ein Neuzeichnen auf jeden Fall nicht mehr nötig.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#13 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
Komme leider immer noch nicht weiter
Habe den Quelltext von Andreas mal ausprobiert - es hakt, sobald ich ein anderes Fenster davor habe und dieses hin und her bewege. ![]() Hatte vor einiger Zeit mal die Sache u.a. mit GetMessage und Repaint probiert gehabt, da lief es unter XP, aber nicht unter Win 7 (dort wurden Teile wieder nicht neu gezeichnet). Kann mir einer noch einen Tipp geben - besten Dank! Gruß Jürgen |
|
|
|
|
|
#14 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 15.02.2009
Beiträge: 10.786
|
Erstelle mal eine EXE und lade die zum Testen hoch. Das von dir beschriebene Verhalten kenne ich so nicht.
__________________
______________ Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert! Mfg AHT |
|
|
|
|
|
#15 (Direktlink) |
|
Erfolgreich angemeldet
![]() Registriert seit: 15.04.2010
Beiträge: 19
|
Habe mal nen kurzen Testcode unter ROC erstellt:
Code:
$P+
SET("ERRORLEVEL",0)
'********************** HINWEISE ********************************
' CODE ERZEUGT MIT ROKO'S OBJECT CREATOR 4.6
' DATUM 06.01.2011 um 13:50 Uhr
' VERWENDETE PROFANVERSION IST 12.0-NT XPROFAN
' CODE ERSTELLT UNTER WINDOWS XP
' !!! Dieser Code wird von Roc immer neu erzeugt !!!
' !!! Erst bearbeiten, wenn alle Objekte erzeugt wurden !!!
' !!! Verändern Sie ggf. feste Pfade in variable Pfade !!!
DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
DECLARE GROUPBOX1&
DECLARE TABCTRL1&
DECLARE MULTIEDIT1&
DECLARE MULTIEDIT2&
WINDOWSTYLE 63
WINDOWTITLE "Neues Fenster"
WINDOW 22,20-640,500
SET("TRUECOLOR",1)
DECLARE ENDE%
CLS GETSYSCOLOR(15)
USEFONT "MS Sans Serif",13,0,0,0,0
SETDIALOGFONT 1
' Hier kann ggf. Ihr Menü hin
GROUPBOX1& = CREATE("GROUPBOX",%HWND,"GROUPBOX",0013,0013,0200,0200)
TABCTRL1& = CREATE("TABCTRL",%HWND,"Reiter1",0013,0224,0197,0227)
MULTIEDIT1& = CREATE("MULTIEDIT",%HWND,"MULTIEDIT",0222,0023,0258,0187)
MULTIEDIT2& = CREATE("MULTIEDIT",%HWND,"MULTIEDIT",0222,0223,0258,0225)
SETFOCUS(%HWND)REPAINT
WHILENOT ENDE%
WAITINPUT
If %KEY=2
ENDE%= 1
ELSEIF %KEY=4
ELSEIF TABCHANGED(TABCTRL1&) 'TABCTRL
ELSEIF GETFOCUS(MULTIEDIT1&) 'MULTIEDIT
ELSEIF GETFOCUS(MULTIEDIT2&) 'MULTIEDIT
ENDIF
ENDWHILE
|
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Hauptfenster entfernen | JörgG | XProfan | 17 | 07.12.2010 17:29 |
| Fischgräte mit der Tastatur zeichnen | Fischgräte | Die Plauderecke | 7 | 20.05.2010 18:23 |
| Zeichnen mit Canvas | Sasa79 | Sonstige Programmiersprachen | 0 | 28.02.2010 16:53 |
| 232 mm Kreis zeichnen und Ausdrucken | Daniel_525_24V | Software - Allgemein | 8 | 22.10.2008 15:34 |
| Notebook - Zeichnen mit PDA Stift | sve07bl | Hardware - Problemlösungen | 6 | 29.06.2005 09:10 |