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:

[ WINDOWS ] fbWindow - So viele GFX-Fenster wie ihr wollt!!
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.07.2010, 15:17    Titel: Antworten mit Zitat

Cherry hat Folgendes geschrieben:
- Es gibt eine neue Function fbWindow.Attach(hWnd), mit der ein bestehendes Window zu einem Screen umfunktioniert werden kann (das ist, was ich oben vorgeschlagen habe), dementsprechend wurde der Constructor um einen attachHWnd-Parameter erweitert. So kann man jetzt einfach mit FBEdit ein Static Control o.ä. in einen Dialog einbauen und es zu einem Screen machen.

Das ist eine tolle Sache! lächeln Das Feature hätte ich bei einem Projekt vor einer Weile ganz gut gebrauchen können. Da habe ich umständlich mit WinAPI "gezeichnet", was auch relativ billig aussah. Die fbgfxlib ist da doch viel angenehmer. lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 28.07.2010, 17:51    Titel: Antworten mit Zitat

@Cherry: ABSOLUT KRASS grinsen

Ich hatte sowas ähnliches überlegt um mehrere Buffer-Fenster in einem MDI-Fenster unterzubringen!
Ich schätze, mit der attach-funktion wird genau das auch funktionieren!

Leider werd ich in den nächsten tagen und nächste woche nicht dazu kommen das genau auszuprobieren, aber, das ist schon absolut fantastisch!!!

Ich mag die fb-gfx-lib auch lieber! Da erscheint alles noch aus den QB-Zeiten so vertraut zwinkern

Kennst du eine möglichkeit die Funktion DoEvents() in einen Thread zu packen?
So dass das fenster sich auch ohne expliziten aufruf der jeweiligen DoEvents-Funktion erneuert?

Bei mir stürzt das programm immer ab, sobald ich .DoEvents in einen Thread packe traurig

Das mit dem NULL-Screen ist ne feine sache lächeln, die funktion, so wie du sie implementiert hast, hatte ich auch innem SDL-Projekt realisiert.

Einzig schade wäre, wenn man das "nur" für Windows so realisieren kann. Für Linux wär sowas auch klasse lächeln
Vielleicht mit GTK? Da hatte ich ja auch mal was mit versucht.. aber das is ziemlich instabil, wenn man dort die gtk_main() als Thread aufruft..
( http://forum.qbasic.at/viewtopic.php?t=7079 )


Zuletzt bearbeitet von OneCypher am 28.07.2010, 18:00, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 28.07.2010, 17:57    Titel: Antworten mit Zitat

DoEvents ist eine Funktion innerhalb eines UDTs, da will das Threadstarten nicht ohne Weiteres.

Das Problem hab ich im EventSystem-Tutorial per Static gelöst (siehe Sub "eventSub" und Function "windowCreate").

Das könnte dir vielleicht weiterhelfen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 28.07.2010, 17:58    Titel: Antworten mit Zitat

Probier mal: ThreadCreate(This.DoEvents, @This) lächeln

Dann natürlich einen Do Until QuitMessage...Loop rein und in den Destructor ein ThreadWait.

Zitat:
@Sebastian:

Äh, das hab ich eingebaut.

mfG Cherry

EDIT: Ah, da war doch was... wenn es wieder nicht funktioniert, kommt das afaik daher, dass die Messages threadspezifisch sind, das DoEvents also im selben Thread sein muss wie der call zu CreateWindowEx. Aber da bin ich mir jetzt nicht 100%ig sicher.

EDIT2: Eigentlich könnte man das RedrawWindow aus DoEvents rausnehmen, weil es durch meinen Timer auch gecallt wird (es wird jetzt also pro Frame 2x gecallt, was unnötig ist). Verwendet man Attach mit einem Childwindow, braucht und kann man DoEvents übrigens nicht verwenden!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 28.07.2010, 18:11    Titel: Antworten mit Zitat

@Cherry: Sorry, habs gerade auch noch gesehen XD .. war da irgendwie verrutscht, sorry!!!! (habs auch korrigiert)
Die Ehre, gebührt natürlich dir lächeln

@MOD: Es ist eigentlich kein Problem eine Funktion eines UDT als Thread zu starte. Das geht natürlich nicht direkt sondern nur indirekt über eine static-funktion. z.B:
Code:

 type testtype
  a as integer
  b as integer
  declare sub c()
 end type

sub testtype.c()
 print "lalalalalala"
end sub

sub c_thread(ttype as testtype ptr)
 do
  ttype->c()
 loop
end sub

dim meinetype as testtype

var thread = threadcreate(cast(any ptr, @c_thread), @meinetype)

threadwait thread


Ich hab den code grade nicht getestet, aber so ungefähr kapselt man eine member-funktion einer klasse in einer "normalen" funktion.

@Cherry nochmal: Ja genau, sowas hab ich auch schon irgendwo inner MSDN gelesen. Was es leider nicht einfacher macht :-/ ..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.07.2010, 18:12    Titel: Antworten mit Zitat

Cherry hat Folgendes geschrieben:
Zitat:
@Sebastian:

Äh, das hab ich eingebaut.

Hab ich etwas anderes behauptet? zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 28.07.2010, 18:20    Titel: Antworten mit Zitat

Nein, darum auch das [quote] rundherum: OneCypher hat geschrieben "@Sebastian: DAS IST ABSOLUT KRASS, etc. etc." lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 29.07.2010, 12:13    Titel: Antworten mit Zitat

@Cherry: Ich hab deine Änderungen jetzt mal ins Projekt übernommen. Hab mal alles kurz angetestet lächeln
Unter welche Lizenz stellt man diesen Quelltext am besten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 29.07.2010, 13:23    Titel: Antworten mit Zitat

Kommt drauf an, was du willst. Wenn du es möglichst frei handhaben willst, wäre wahrscheinlich LGPL ganz gut. MIT kenne ich nicht so gut, könnte auch in Frage kommen
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 29.07.2010, 13:55    Titel: Antworten mit Zitat

Oder WTFPL, die ist ganz gut, wenn es WIRKLICH frei sein soll. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


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

BeitragVerfasst am: 29.07.2010, 13:56    Titel: Antworten mit Zitat

Vielleicht hilft dir diese Zusammenstellung ja: http://www.osscc.net/en/licenses.html#compatibility
BSD ist toll. happy

Westbeam hat Folgendes geschrieben:
Oder WTFPL, die ist ganz gut, wenn es WIRKLICH frei sein soll. zwinkern

Die ist nur "gut", wenn es dir wirklich vollkommen scheißegal ist, was andere Leute mit deinem Code machen.
_________________
» 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
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 29.07.2010, 13:58    Titel: Antworten mit Zitat

Sag ich ja. WIRKLICH frei halt. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 29.07.2010, 20:51    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
@Cherry: Ich hab deine Änderungen jetzt mal ins Projekt übernommen. Hab mal alles kurz angetestet lächeln
Unter welche Lizenz stellt man diesen Quelltext am besten?


Danke lächeln

Mir fällt grade noch was ein: Du solltest noch die Möglichkeit einbauen, dass nicht im Constructor automatisch ein Screen erzeugt wird (außer man will es so). In meinem Beispiel hab ich das gelöst, indem ich New verwendet habe (und Delete vergessen, merk ich grade), aber angenehmer wäre es vllt anders.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.07.2010, 20:13    Titel: Antworten mit Zitat

@Cherry: Ich denke, das er im Constructor automatisch einen Screen erzeugt, hast du schon 100% korrekt implementiert!
Denn ein GFX-Screen MUSS erzeugt "sein" bzw "werden", damit man überhaupt FB-Images mit ImageCreate korrekt anlegen und benutzen kann.
Bei meinen Versuchen stürzt jedes Programm ab sobald man Grafikbefehle auf einen Image-Buffer anwenden will bei dem KEIN GFX-Screen vorher erzeugt wurde.
Ich bin dann auch der Meinung, man sollte einen initialisierten Screen nicht mehr nachträglich deaktivieren..

Was genau macht:
Code:

SetWindowLong(hWnd, GWL_WNDPROC, @WndProc)

?


Ich bin übrigens immer noch total überrascht wie verdammt GEIL die neue Wine-Version (1.2) funktioniert XXD .... ich brauch eigentlich nicht mehr Windows-Booten um Windows-Programme mit Freebasic zu programmieren XXD
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 30.07.2010, 21:05    Titel: Antworten mit Zitat

Es ersetzt den Nachrichtenhandler.

btw. gehört zu gutem Code gehört an dieser Stelle auch, dass man den alten Handler beim Schließen des Fensters wieder einsetzt und darüber in Kenntniss setzt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.07.2010, 21:54    Titel: Antworten mit Zitat

@28398: Ich weiss leider jetzt nicht genau, was du damit meinst. Du darfst das aber gerne mal in das Projekt einbauen, damit ich mir das mal anschauen kann lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 31.07.2010, 09:57    Titel: Antworten mit Zitat

@OneCypher: ich meinte, dass fbWindow nicht sofort einen fbWindow-Screen erzeugen sollte.
@28938: Stimmt, nur wird die alte Prozedur hier nie mehr benötigt, weil das Platzhaltercontrol quasi für immer durch den fbWindow-Screen ersetzt werden soll. Aber du hast Recht, ich sollte vllt noch eine Detach-Funktion schreiben, und dann muss ich das natürlich speichern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 31.07.2010, 13:21    Titel: Antworten mit Zitat

@Cherry: Siehe Signatur.
Es ist immer gut möglich, dass ein Control beim Erstellen Speicher alloziert. Damit dieser korrekt freigegeben werden kann, muss der alte Handler bei WM_DESTROY wieder eingesetzt werden und ebenfalls eine WM_DESTROY-Nachricht bekommen. Es muss ja nicht unbedingt Speicher sein, Handles gibts ja auch noch.

@OneCypher:
Das ist nicht mehr das ganz einfache Win32-rumgeplänkel^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Cherry



Anmeldungsdatum: 20.06.2007
Beiträge: 249

BeitragVerfasst am: 31.07.2010, 14:43    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
@Cherry: Siehe Signatur.
Es ist immer gut möglich, dass ein Control beim Erstellen Speicher alloziert. Damit dieser korrekt freigegeben werden kann, muss der alte Handler bei WM_DESTROY wieder eingesetzt werden und ebenfalls eine WM_DESTROY-Nachricht bekommen. Es muss ja nicht unbedingt Speicher sein, Handles gibts ja auch noch.


Ach soo, ich dachte, es ging nur ums Prinzip. Daran hab ich überhaupt nicht gedacht. Danke für die Info!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 02.08.2010, 22:26    Titel: Antworten mit Zitat

@cherry: Hm, also, ich hatte das schon so konzipiert, dass sich direkt ein fenster öffnen soll.
Denn das hat mehrer gründe:
einerseits wollte ich es für jeden "normalen" freebasic-programmierer ermöglichen mehrere GFX-Ausgabefenster zur verfügung zu stellen
und andererseits glaube ich das diese "attach" funktion eine plattformübergreifende programmierung nicht leichter macht!
auch wenn diese attach-funktion ziemlich faszinierend ist zwinkern

ich hatte überlegt, die reopen-funktion in screenres() umzubennenen und eine neue namens screen() anzulegen.
so das eine solche screen-erstellung so nahe wie möglich an die GFX-lib-syntax angelehnt ist.

im nächsten schritt such ich mir die richtiigen api-funktionen für ein linux-X11-pendant zusammen und fange eine plattformübergreifende fbwindow-lib zu schreiben zwinkern

Das soll dich natürlich an nichts hindern zwinkern .. also ich würde es sehr begrüßen, wenn du noch ideen hättest die du hier implementieren könntest lächeln

PS: ich hab den quelltext für die fbwindow.bi aus seite 1 aktualisiert, da waren noch ein paar sachen drin, die nich so ganz funktioniert hatten..
über die funktion .Resized() kann man auslesen ob die größe eines screens durch den benutzer geändert wurde.
ein beispiel liefere ich noch dazu!
und bei mir hatte dein code immer ein fenster erzeugt dessen größe man nicht ändern kann. Die stelle hab ich ein bischen umformuliert.
konkret:
Code:

if not resizable then ...


heisst jetzt

Code:

if resizable = false then ...


es sollte eigentlich das selbe sein, ist es aber anscheinend nicht zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
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