Forum | | | | Cyberangle | Hallo,
ich habe mit der Listview.DLL Kassenverwaltung realisiert. Das funktioniert recht gut. Ich habe nur ein kl. Problem;
In einer Groupbox habe ich 3 Radiobutton zusammengefasst, Legen in nun ein anderes beliebiges Progammfenster über das Kassenfenster so hat sich nach der Schliesung des beliebigen Progammfensters die Hintergundfarbe (nur in der Goupbox ) auf die Hintergrundfarbe des vorher geöffneten belieben Progammfensters geändert.. Das passiert aber nur, wenn ich am Progammanfang nach dem öffen des Listrviews InitMessages(hwnd%) aufrufe. Wenn ich die Zeile auskommentiere tritt der Fehler nicht auf.
Kann mir das jemand erklären??? |
| | | | |
| | Frank Abbing | Dazu müsstest du schon ein kleines lauffähiges Beispiel zeigen. So aus der Ferne lässt sich sonst nichts sagen. |
| | | | |
| | | | | | | |
| | Cyberangle | Sorry,
da hätte ich auch selbst drauf kommen müssen. Anbei ein Stück der Hauptschleife: KompilierenMarkierenSeparierenDeclare bereich#,listview&,lv2&,lvdll&,text$,bytes&,speicher&,y&,z&
Declare schleife%,nrdll&,nred1&,nred2&,nred3&,nred4&,delline& Var Listview, Ndll u. Schleife
Declare datu&,kont&,numm&,vorg&,einz&,ausz&,grupp&,usttext2&,usttext3&,usttext4&Var. für edits
Declare radi1&,radi2&,radi3&,zugang!,abgang!,zeile&,butt1&,butt2&
Declare ust0!,ust1!,ust2!,lastfocus&,Datum$,konto%,nummer%,vorgang$,ab$,eb$
Declare ust!,ustcheck!,ende%, zug2&,abg2&,ustges&,ab2&,eb2&,gesamt!
Declare t$,n$,anz% Var für messagebox
Def GetSysColor(1) !USER32,GetSysColor
Def @GetKeyState(1) !User32,GetAsyncKeyState
Def NumbMessages(2) !NEdit.dll,InitMessages Nummerisches Zahlenfeld
$I Listview_Funktionen.inc
lvdll&=usedll(Listview.dll)
SetTrueColor 1
Decimals 2
Windowstyle 26+512
Windowtitle Kassenverwaltung Programm
Window 0,0-%maxX,%maxY
Cls GetSysColor(15)
alle Listviews öffenen und die Vorgangsdaten ins 2. LV übernehmen
lv2&=CreateListView(%hwnd,%hinstance,RGB(0,0,0),RGB(255,255,255),-1,$31)
IColumn(lv2&,Vorgang wählen,100,0)
AutoSortListview(lv2&,1)
ShowListView(lv2&,720,160,107,334)
listview&=CreateListView(%hwnd,%hinstance,Rgb(0,0,0),Rgb(255,255,255),-1,$31) Leeres Listview
IColumn(listview&,Datum,100,2) Spalten erstellen
IColumn(listview&,Konto,55,1)
IColumn(listview&,Nummer,55,1)
IColumn(listview&,Vorgang,135,0)
IColumn(listview&,Einzahlung,60,1)
IColumn(listview&,Auszahlung,60,1)
IColumn(listview&,UST,60,1)
IColumn(listview&,Anfbst,65,1)
IColumn(listview&,Endbst,60,1)
AutoSortListview listview&,1,0,1,1,0,0,0,0,0
ShowListView(listview&,10,160,687,400)
REM
InitMessages(%hwnd)
Menue erstellen
PopUp &Datei
Appendmenu 201,Datei &öffnen
Appendmenu 202,Datei &schließen
AppendMenu 203,&Neuer Monat
Separator
AppendMenu 204,&Beenden
PopUp &Tools
AppendMenu 401,&Anfangsbestand eingeben
Appendmenu 402,&Monatsabschluß
PopUp &Hilfe
Appendmenu 601,&info
Appendmenu 602,&Optionen
ust0!=0 UST mit 0 Prozent
Create(Text,%hwnd,Spaltensummen :,210,562,120,24)
Create(Text,%hwnd,Endbestand :,210,592,120,29)
zug2&=Create(edit,%hwnd,xxxx,370,562,62,24) Summenreihe unter dem LV
abg2&=Create(edit,%hwnd,x,430,562,62,24)
ustges&=Create(edit,%hwnd,xx,490,562,62,24)
ab2&=Create(edit,%hwnd,xx,550,562,62,24)
eb2&=Create(edit,%hwnd,xxxx,370,592,61,24)
datu& = Create(DateEdit,%hwnd,,10,125,80,24) edits erzeugen
ControlEdit sind Zahlenfelder rechtsbündig
usttext2& = Create(Text,%hwnd, +Str$(ust0!),515,30,32,36) Text in ust-Box
usttext3& = Create(Text,%hwnd, +Str$(ust1!),515,66,32,36)
usttext4& = Create(Text,%hwnd,Str$(ust2!),515,116,32,36)
radi1& =Create(RadioButton,%hwnd,%,580,40,32,35)
radi2& =Create(RadioButton,%hwnd,%,580,78,32,35)
radi3& =Create(RadioButton,%hwnd,%,580,110,32,35)
grupp&= Create(GroupBox,%hwnd,UST.,500,15,150,139) Ust Box erzeugen
Clear ende%
While ende% < 1
WaitInput
If MenuItem (204) Menueaufruf >Datei - beenden<
inc ende%
inc schleife%
EndIf
If MenuItem (201) Menueaufruf >Datei - Datei Öfnnen<
@ShowWindow(butt1&,1)
@ShowWindow(butt2&,1)
EnableMenu 401,1 menu Anfagsbestand deaktivieren
Endif
If MenuItem (401) Menueaufruf >Tools - Anfangbestand eingeben<
datum$ = date$(1)
ab$ = Input$(Bitte geben Sie den Anfangsbestand ein: ,Bestands-Eingabe,ab$)
datum$ = Input$(Bitte geben Sie das Datum ein: ,Datums-Eingabe,date$(0))
EnableMenu 401,1 menu Anfagsbestand deaktivieren
@ShowWindow(butt1&,1) Buttons sichtbar
@ShowWindow(butt2&,1)
EndIf
Wend
DestroyWindow(nred1&) nummerisches Feld zerstören
DestroyWindow(nred2&)
DestroyWindow(nred3&)
DestroyWindow(nred4&)
EraseListview(listview&) Listviewstrukturen entfernen
EraseListView(lv2&)
DestroyWindow(listview&) Profan Befehl, um Fensterobjekte zu zerstören
DestroyWindow(lv2&)
CloseMessages(%hwnd) Subclassing des Parentfensters entfernen
End
|
| | | | |
| | Frank Abbing | Hallo Michael,
ich kann diesen Farbwechsel bei mir nicht bestätigen. Unter XP-Home scheint mir alles normal zu sein. Welches Betriebssystem benutzt du denn?
Ich wüsste auch nicht, warum die Radiobuttons und die Groupbox was mit dem Listviews zu tun haben könnten, komische Sache. Mal sehen, welche Erfahrungen die anderen gemacht haben... |
| | | | |
| | Cyberangle | Ich habe Windows XP mit allen Servicepacks. Wenn ich das Kassen-Programm aufrufe habe ich auch ein ganz normales graues Programmfenster Mit den beiden Listviews und der Groupbox. Minimiere ich jetzt das Programmfenster mit dem Minimieren Button so dass die Fensterbezeichnung nur noch in der Taskleiste von Windows liegt und ich nur noch das Profellowfenster sehe, von dem ichdas Kassenprog. und kicke dann in der Taskleisteauf den Kassenprg-Button um das Programmfenster wieder zu öffnen, dan stimmt der Hintergund innerhalb der Groupbox nicht mehr. Kommentiere ich jetzt die Zeile KompilierenMarkierenSeparieren aus und wiederhole die minimierung des Programmfenster so tritt der Fehler nicht mehr auf. |
| | | | |
| | Jörg Sellmeyer | Bei mir ist ebenfalls alles normal. Keine falsch dargestellte Groupbox. Ich hatte ähnliches auch mal aber nur im Zusammenhang mit Prfellow. Leider weiß ich nicht mehr, ob ich es irgendwie lösen konnte. Tritt das denn auch, wenn Du das Programm aus dem Explorer heraus aufrufst. Vielleicht erledigt sich ja so schon das ganze. Bau doch mal ein RePaint ein, wenn das Programm wieder maximiert wird. PrFellow erzeugt manche Controls auf eigene Art und da es (leider, leider) schon seit Jahren nicht mehr weiterentwickelt wird, hält es natürlich weder mit der Profan- noch mit der Windoesentwicklung Schritt. Ich hab mich auch schweren Herzens getrennt aber der neue XProfEd ist wirklich gut mit den Möglichkeiten, die die Codefaltungen bieten. Und fürs Erstellen des Fensters gibt es ja ROC, der mittlerweile auch schon aus den Kinderschuhen raus ist. Gruß Jörg |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 18.03.2007 ▲ |
| |
| | Cyberangle | Hallo Jörg,
ich habe den Programmtest jetzt nacheinander in den Profan-Pad und in den RGH ProfanED geladen und mit F7 ausgeführt. Bei beiden tritt der gleiche Fehler auf. Sobald ich das Programm minimiere und wieder vergrößere ( Siehe JPG-Bild weiter oben). Der neue XPrfED läuft doch noch nicht unter XPorfan 8. Ausserden tritt der Fehler ja auch auf, wenn ich einbeliebiges fremdes Progamm (z.B. Freecell) über mein Progamm lege und dann wieder schließe |
| | | | |
| | Jörg Sellmeyer | Was ist denn, wenn Du InitMessages vor dem Erstellen des Listviews aufrufst? |
| | | Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 18.03.2007 ▲ |
| |
| | Frank Abbing | InitMessages() startet das Subclassing des Parentfensters, also des Fensters, in dem die Listviews angesiedelt werden. Dabei ist es egal, wann es aufgerufen wird, nur das Parentfenster (meisstens wohl %HWND) muss vorhanden sein. Listviews können durchaus auch später erstellt werden. Hab im Subclassing-Quellcode nochmal nachgesehen. Nirgendwo benutze ich API, welche Einfluss nehmen auf die Grafik von %HDC oder %HWND. GDI32 wird gar nicht verwendet. Ich vermute den Fehler irgendwo als Fehlfunktion deines Systems, vielleicht auch ein fremdes Programm. Starte deinen Code mal, nachdem du alle aktiven Programme beendet hast. |
| | | | |
| | | Evtl. ein Problem des Grafikkartentreibers? Da gibt es einige merkwürdige Sachen... |
| | | | |
| | Michael Wodrich | Ja, vermute ich auch.
a) Die Farbauflösung ist nicht 32 sondern 16-Bit. Das ist eine Möglichkeit für kleine Grafikfehler.
b) Der Grafiktreiber sollte auf den neuesten Stand gebracht werden.
Ich hatte solche Probleme auch, die sind mit einem neuen Treiber alle verschwunden.
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 18.03.2007 ▲ |
| |
|
AntwortenThemenoptionen | 11.073 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |