SendMessageA Absonderlichkeiten

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

SendMessageA Absonderlichkeiten

Beitrag von georg »

Hallo,


ich schlage mich (mal wieder) mit dem Problem herum, in einem XbpDialog() mehr (flächenmässig) unterzubringen, als die :drawingArea gross ist. Das funktioniert nun auch einigermassen, allerdings mit dem :show() ist der untere Bereich der :drawingArea sichtbar, und eigentlich soll der obere Bereich sichtbar sein:

///=== Title Bar
Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5
/// === unterer Rand

Wenn die Grösse des XbpDialogs die Anzeige von drei Zeilen zu lässt, sehe ich folgendes:

/// === Title Bar
Zeile 3
Zeile 4
Zeile 5
/// === unterer Rand

Gut, dann gibt es

SendMessageA(oDlg:getHWND(), WM_VSCROLL, SB_TOP, 0)

um die Anzeige so zu haben:

/// === Title Bar
Zeile 1
Zeile 2
Zeile 3
/// === unterer Rand

Soweit, so gut. Nun kommt es bei einem vom fünf Aufrufen (aber auch schon zehn mal nacheinander) vor, dass die Anzeige so aussieht:

/// === Title Bar
(leer)
(leer)
(leer)
/// === unterer Rand
(viele, viele, viele Leerzeilen)
Zeile 1 bis Zeile 5 "gestaucht"

d.h. wenn ich herunterscrolle, ist die :drawingArea ein Vielfaches der eigentlichen Grösse "gross".

Ich habe das im Debugger mal kontrolliert, die Werte von XbpDialog und :drawingArea ist immer gleich, egal ob die Anzeige korrekt ist oder nicht (letztes Beispiel). Das Problem tritt auf mit dem Ausführen des SendMessageA.

Passieren tut dies auf Rechnern mit Windows 7, 64 bit Version.

Hat einer von Euch eine Erklärung oder einen besseren Lösungsansatz?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SendMessageA Absonderlichkeiten

Beitrag von brandelh »

Hi,

dass du den unteren Bereich siehst statt dem oberen liegt wohl daran, dass links unten 0,0 ist.
Das kann man ändern ;-)
Danach hat man viel ruhigere Bildschirme und links oben ist 0,0 ... suche man nach TOP LEFT ORIGIN.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SendMessageA Absonderlichkeiten

Beitrag von brandelh »

Und hier die nötige Zeile beim XbpDialog():new() oder create():

Code: Alles auswählen

aPP := { { XBP_PP_ORIGIN , XBP_ORIGIN_TOPLEFT }, ... }
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SendMessageA Absonderlichkeiten

Beitrag von georg »

Hallo, Hubert -


vielen Dank für den Tipp, aber ich habe mich inzwischen recht gut an das "Standard-Koordinatensystem" gewöhnt, und müsste zuviel anpassen.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: SendMessageA Absonderlichkeiten

Beitrag von AUGE_OHR »

georg hat geschrieben:ich schlage mich (mal wieder) mit dem Problem herum, in einem XbpDialog() mehr (flächenmässig) unterzubringen, als die :drawingArea gross ist. Das funktioniert nun auch einigermassen ...
soweit war ich auch ...

Frage : sind deine XbParts "direkt" auf der o:drawingArea ?

ich habe das ganze dann durch eine Static > o:drawingArea gelöst wobei ich auch einen "eigenen" Scrollbar in der Class habe und nicht den vom XbpDialog
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: SendMessageA Absonderlichkeiten

Beitrag von georg »

Hallo, Jimmy -


Deine Überlegung ist richtig. Ich habe auch ein wenig über Deinen Ansatz nachgedacht, und er klingt pfiffig. Allerdings muss dann aber der XbpDialog eine fixe Grösse haben, weil Du sonst Gefahr läufst, zwei Scrollbars an einer Seite zu haben?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: SendMessageA Absonderlichkeiten

Beitrag von AUGE_OHR »

georg hat geschrieben:... weil Du sonst Gefahr läufst, zwei Scrollbars an einer Seite zu haben?
wenn ein XbPart > o:drawingArea ist sollte ja ein Scrollbar erscheinen, wenn nicht kann man ihn "zwingen" mit

Code: Alles auswählen

oDlg:drawingArea:scrollbars := XBP_SCROLLBAR_VERT
wenn man nun die (eingebauten ) Scrollbars "abstellen" will muss man

Code: Alles auswählen

oDlg:drawingArea:scrollbars := XBP_SCROLLBAR_NONE
verwenden
gruss by OHR
Jimmy
Antworten