Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

einfach winapi frage
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 04.08.2007, 15:26    Titel: Antworten mit Zitat

http://csderats.cs.funpic.de/stuff/fb-derrisch/

funzt....
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 04.08.2007, 19:11    Titel: Antworten mit Zitat

@dotmarkus:
Gewöhn dir doch mal bitte an, die edit-Funktion zu benutzen. mit den Augen rollen
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 05.08.2007, 13:49    Titel: Antworten mit Zitat

Oh man die Seite hab ich garnicht gesehn xD
_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 05.08.2007, 15:34    Titel: Antworten mit Zitat

AndT hat Folgendes geschrieben:
Oh man die Seite hab ich garnicht gesehn xD


zusammenhang? mit den Augen rollen
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dotmarkus



Anmeldungsdatum: 04.08.2007
Beiträge: 14

BeitragVerfasst am: 06.08.2007, 10:11    Titel: Antworten mit Zitat

hallo
csderats hat eine messagebox verwendet, die kommt ohne
get-, transplate- und dispatchmessage-schleife aus.

weiss irgendwer warum aber in meinem beispiel , mit einem normalen fenster, sendmessage in der sub nicht funktioniert?
scheint mit obengenannter schleife zu tun zu haben.

ich würde es auch gerne ohne messagboxen schaffen.

danke
m.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 06.08.2007, 13:57    Titel: Antworten mit Zitat

Kleine Sache am Rande:
Das ist keine MessageBox, sondern ein Dialog.

Wenn du http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=84 ohne -s gui o.ä. kompilierst, kommt in der Konsole die Ausgabe wie sie soll, machen tut er aber nichts.... merkwürdig....
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 06.08.2007, 14:15    Titel: Antworten mit Zitat

dotmarkus hat Folgendes geschrieben:
hallo
csderats hat eine messagebox verwendet, die kommt ohne
get-, transplate- und dispatchmessage-schleife aus.

weiss irgendwer warum aber in meinem beispiel , mit einem normalen fenster, sendmessage in der sub nicht funktioniert?
scheint mit obengenannter schleife zu tun zu haben.

ich würde es auch gerne ohne messagboxen schaffen.

danke
m.

Du zeichnest in der Sub irgendwas in einen DC und schickst DANACH eine WM_PAINT. Damit wird alles, was Du gerade gezeichnet hast, wieder gelöscht.
Darum werden Zeichnungen immer WÄHREND der Bearbeitung der WM_PAINT erstellt. Du kannst also eine Sub, in der eine Zeichnung angefertigt wird, bei WM_PAINT aufrufen.
Abgesehen davon: Es macht keinen Sinn, eine WM_PAINT per SendMessage zu schicken. WM_PAINT löst man aus, indem man mit InvalidateRect den Fensterbereich ungültig macht. Das kannst Du tun, indem Du eine selbstdefinierte Nachricht schickst und diese bei Bedarf bearbeitets.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dotmarkus



Anmeldungsdatum: 04.08.2007
Beiträge: 14

BeitragVerfasst am: 06.08.2007, 21:22    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
dotmarkus hat Folgendes geschrieben:
hallo
csderats hat eine messagebox verwendet, die kommt ohne
get-, transplate- und dispatchmessage-schleife aus.

weiss irgendwer warum aber in meinem beispiel , mit einem normalen fenster, sendmessage in der sub nicht funktioniert?
scheint mit obengenannter schleife zu tun zu haben.

ich würde es auch gerne ohne messagboxen schaffen.

danke
m.

Du zeichnest in der Sub irgendwas in einen DC und schickst DANACH eine WM_PAINT. Damit wird alles, was Du gerade gezeichnet hast, wieder gelöscht.
Darum werden Zeichnungen immer WÄHREND der Bearbeitung der WM_PAINT erstellt. Du kannst also eine Sub, in der eine Zeichnung angefertigt wird, bei WM_PAINT aufrufen.
Abgesehen davon: Es macht keinen Sinn, eine WM_PAINT per SendMessage zu schicken. WM_PAINT löst man aus, indem man mit InvalidateRect den Fensterbereich ungültig macht. Das kannst Du tun, indem Du eine selbstdefinierte Nachricht schickst und diese bei Bedarf bearbeitets.


jetzt hab ich diese paar zeilen hier sicher schon 15 mal gelesen und noch nicht vollständig decodiert.
sollte jemand ein praktisches beispiel haben , wäre ich sehr dankbar.
danke jedenfalls für die sehr zweckdienlichen hinweise.
achja @ csderats: dialog, du hast natürlich recht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.08.2007, 09:16    Titel: Antworten mit Zitat

dotmarkus hat Folgendes geschrieben:
Elektronix hat Folgendes geschrieben:

Du zeichnest in der Sub irgendwas in einen DC und schickst DANACH eine WM_PAINT. Damit wird alles, was Du gerade gezeichnet hast, wieder gelöscht.
Darum werden Zeichnungen immer WÄHREND der Bearbeitung der WM_PAINT erstellt. Du kannst also eine Sub, in der eine Zeichnung angefertigt wird, bei WM_PAINT aufrufen.
Abgesehen davon: Es macht keinen Sinn, eine WM_PAINT per SendMessage zu schicken. WM_PAINT löst man aus, indem man mit InvalidateRect den Fensterbereich ungültig macht. Das kannst Du tun, indem Du eine selbstdefinierte Nachricht schickst und diese bei Bedarf bearbeitets.


jetzt hab ich diese paar zeilen hier sicher schon 15 mal gelesen und noch nicht vollständig decodiert.

Du hast die Zeichenroutine einmal im Hauptprogramm und einmal in der Subroutine.
1. ist das unnötig, weil Du damit dopppelte Arbeit machst->Reesourcenverschwendung.
2. wird alles, was Du in der Sub zeichnest, im Hauptprogramm unter WM_PAINT wieder übermalt. Da Du in der Sub eine WM_PAINT an das Hauptprogramm schickts, geschieht das jedesmal beim Durchlaufen der Sub.
3. Der Wert für Counter wird in der Sub ermittelt. Hast Du überprüft, ob die Counter-Variable nach Rückkehr der Sub ins Hauptprogramm noch existiert? In der Regel werden dafür nämlich nur Kopiien angelegt, die nach Ende der Sub gelöscht werden (ist jedenfalls in C so).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dotmarkus



Anmeldungsdatum: 04.08.2007
Beiträge: 14

BeitragVerfasst am: 07.08.2007, 11:39    Titel: Antworten mit Zitat

jetz ist mir klar was du meinst

schau dir mal obenstehendes beispielprogramm von csderats an
er hat den counter global deklariert. zwar hat er sowohl in der sub als auch in wmpaint die gleichen zeichenroutinen drin , jedoch sollte auch wmpaint
den wert des counters ins fenster schreiben.
witzigerweise wird nach seinen consolenmeldungen sogar wmpaint korrekt empfangen , der wert im fenster ändert sich aber dennoch nicht.

edit:
Zitat:
3. Der Wert für Counter wird in der Sub ermittelt. Hast Du überprüft, ob die Counter-Variable nach Rückkehr der Sub ins Hauptprogramm noch existiert? In der Regel werden dafür nämlich nur Kopiien angelegt, die nach Ende der Sub gelöscht werden (ist jedenfalls in C so).


die sub ist übrigens ein thread und läuft die ganze zeit nebenbei. das nämlich deswegen , weil das hauptprogramm ja unbedingt in der getmessageschleife hängen muss , und ein sleep oder sonst was zeitintensives in ebengenannter schleife das fenster für eine gewisse zeit ausser funktion setzen würde.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 07.08.2007, 12:44    Titel: Antworten mit Zitat

Das finde ich langsam hochinteressant grinsen
Die Variable "count" hat nicht nur im Thread sondern auch während des Empfangs von WM_PAINT den richtigen Wert, cool aber selbst nach Lektüre der entsprechenden Abschnitte im Petzold (jaa, ich habe ihn inzwischen auch *freu* Wobei ich jetzt auch weiß, wie man Menüs zur Laufzeit verändert) wird mir nicht klar, warum es nicht das Tut was es soll.
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 07.08.2007, 12:51    Titel: Antworten mit Zitat

@csderats
Genau darauf will ich hinaus: Das Hauptprogramm greift offensichtlich nicht korrekt auf die Counter-Variable zu.
Global deklarierte Variablen werden nicht durch subs überschreiben, sondern es werden in der Sub lokale Kopiien angelegt- mit eigener Speicheradresse. Sub und Hauptprogramm greifen also auf verschiedene Speicherstellen zu.

Man muß den Counter so deklarieren, daß auch die Sub auf die Originalvariable zugreift (in C heißt das Schlüsselwort "static")- oder der Sub einen Zeiger oder eine Referenz übergeben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dotmarkus



Anmeldungsdatum: 04.08.2007
Beiträge: 14

BeitragVerfasst am: 07.08.2007, 20:27    Titel: Antworten mit Zitat

Elektronix hat Folgendes geschrieben:
@csderats
Genau darauf will ich hinaus: Das Hauptprogramm greift offensichtlich nicht korrekt auf die Counter-Variable zu.
Global deklarierte Variablen werden nicht durch subs überschreiben, sondern es werden in der Sub lokale Kopiien angelegt- mit eigener Speicheradresse. Sub und Hauptprogramm greifen also auf verschiedene Speicherstellen zu.

Man muß den Counter so deklarieren, daß auch die Sub auf die Originalvariable zugreift (in C heißt das Schlüsselwort "static")- oder der Sub einen Zeiger oder eine Referenz übergeben.


wenn man aber in den code von csderats schaut sieht man das er testhalber eine konsolenausgabe im hauptprogramm implementiert hat und zwar inklusive ausgabe des werts von count der dann in der konsole auch stimmt.
wie kann es sein, dass im hauptprogramm (wmpaint) count einmal falsch und einmal korrekt abgefragt wird (sogar im gleichen durchlauf)?

edit: und warum wird der wert dann doch noch ins fenster geschrieben und zwar wenn das fenster resized wird ? beim resizen des fensters wird ja auch nichts anderes gemacht als eine wmpaint gesendet. demnach müsste die wmpaint im hauptprogramm bei nachwievor laufender sub den counter-wert beim aufruf durch ein resize korrekt abfragen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 08.08.2007, 08:59    Titel: Antworten mit Zitat

dotmarkus hat Folgendes geschrieben:

wie kann es sein, dass im hauptprogramm (wmpaint) count einmal falsch und einmal korrekt abgefragt wird (sogar im gleichen durchlauf)?

edit: und warum wird der wert dann doch noch ins fenster geschrieben und zwar wenn das fenster resized wird ? beim resizen des fensters wird ja auch nichts anderes gemacht als eine wmpaint gesendet. demnach müsste die wmpaint im hauptprogramm bei nachwievor laufender sub den counter-wert beim aufruf durch ein resize korrekt abfragen.

Ich hatte ja gesagt: Beschränke Dich auf die WM_PAINT im Hauptprogramm. Nutze InvalidateRect, um im Hauptprogramm eine WM_PAINT auszulösen. Von der Sub eine zu schicken, macht keinen Sinn.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 08.08.2007, 13:34    Titel: Antworten mit Zitat

http://www.cpp-tutor.de/mfc/mfc/kap2/_intern/invrect.htm

Code:
InvalidateRect (hWnd,null, true)
Nat. im Thread.

http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=91
funzt... lächeln
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz