Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 129
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28.12.2010, 14:34   #1 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard Hauptfenster neu zeichnen

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
Das Hauptfenster (1280x800) hat eine Listview, 2 Multiedits, Groupboxen usw.
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
Jürgen Baier ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.12.2010, 15:04   #2 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

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
AHT ist offline   Mit Zitat antworten
Alt 28.12.2010, 15:23   #3 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard

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
Jürgen Baier ist offline   Mit Zitat antworten
Alt 28.12.2010, 15:27   #4 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

Welche Details werden zerstört?
__________________
______________

Bitte Schnelltest durchführen: Neuer Virus, ahnungslose User seit Monaten infiziert!

Mfg

AHT
AHT ist offline   Mit Zitat antworten
Alt 28.12.2010, 15:33   #5 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

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
AHT ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.12.2010, 15:37   #6 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard



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
Jürgen Baier ist offline   Mit Zitat antworten
Alt 28.12.2010, 15:45   #7 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Bangkok ist offline   Mit Zitat antworten
Alt 28.12.2010, 15:54   #8 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

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
AHT ist offline   Mit Zitat antworten
Alt 28.12.2010, 16:10   #9 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

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)
Andreas Miethe ist offline   Mit Zitat antworten
Alt 28.12.2010, 16:10   #10 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard

@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.
Jürgen Baier ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 28.12.2010, 16:17   #11 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard

@Andreas: Danke, werde ich mal austesten (meine letzte Antwort war zeitgleich mit deinem Posting gewesen - hatte ich nicht gelesen)
Jürgen Baier ist offline   Mit Zitat antworten
Alt 28.12.2010, 19:53   #12 (Direktlink)
Super-Moderator
 
Benutzerbild von Frabbing
 
Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
Standard

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.
Frabbing ist gerade online   Mit Zitat antworten
Alt 06.01.2011, 11:06   #13 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard

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
Jürgen Baier ist offline   Mit Zitat antworten
Alt 06.01.2011, 13:26   #14 (Direktlink)
AHT
Super-Moderator
 
Registriert seit: 15.02.2009
Beiträge: 10.786
Standard

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
AHT ist offline   Mit Zitat antworten
Alt 06.01.2011, 14:23   #15 (Direktlink)
Erfolgreich angemeldet
 
Registriert seit: 15.04.2010
Beiträge: 19
Standard

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
Neuzeichnen geht soweit - wenn ich aber ein anderes Programmfenster davor (schnell) verschiebe, dann kommt das Neuzeichnen des Hauptfensters nicht mehr hinterher. Denke mal, dass die Geschwindigkeit des Rechners auch ein Grund dafür ist?!

Jürgen Baier ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:41 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2