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 Programm
Gehe zu Seite 1, 2  Weiter
 
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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 10.05.2009, 22:42    Titel: Windows Programm Antworten mit Zitat

Hallo

ich habe jetzt mein erstes kleines Windows-Programm in seinen Ansätzen fertig, sodass ich es hier einmal reinstellen möchte.
Die Funktion ist derzeit nebensächlich, um was es mir geht ist, ob der "Stil" des Programmes passt. Es ist jetzt mein erstes Windows-Programm unter Verwendung der grafischen Oberfläche und ich hätte gerne ein paar Kommentare, Kritiken dazu, was an dem Code schlecht ist, was man besser machen könnte, wie man es besser machen könnte, was kompliziert ist und wie man es einfacher machen könnte, was problematisch ist und möglicherweise zu Fehlern und Programmabstürzen führen könnte, was ein schlechter Programmierstil ist, etc.
Ich möchte mir nämlich jetzt nicht einen schlechten Programmierstil und umständliche Lösungen für Windows-Programme angewöhnen.

Was ich noch nicht geschafft habe und hoffe, dass es mir jemand erklären kann:
- Ausblenden/Einblenden von Steuerelementen
- Positionieren von Steuerelementen bei Größenänderung des Fensters (deshalb das Fenster mit fixer Größe derzeit)
- ProgressBar, die während eines länger andauernden Vorgangs den aktuellen Fortschritt anzeigt
- Zeilenumbruch in einem MultiLine-Textfeld in FBedit (in der Resourcen-Datei)
- Textbox akzeptiert derzeit die Tabulatortaste nicht
- Aktion beim Druck einer bestimmten Taste ausführen (bzw. dies nur tun, wenn z.B. die Textbox gerade aktiv ist)

Das Programm hab ich geZIPt und hier hochgeladen.

Ich bin auf eure Kommentare gespannt

St_W

(Achja: es ist noch kein "projekt", sondern dient mir zum Erlernen von Windows-Programmierung --> darum nicht unter Projektvorstellungen)
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 16.05.2009, 22:00    Titel: Antworten mit Zitat

Hat keiner, der sich etwas mit der Thematik auskennt, kurz einmal Zeit den Quellcode zu überfliegen? Ich verwende ja nur grundlegende Steuerelemente wie Buttons, Textfelder, Labels und Listboxes.

Eine kurze Antwort reicht, natürlich auch wenn alles OK wäre.

Es wäre recht wichtig für mich, da ich dann weiß, dass ich so weitermachen kann bzw. grundlegende Änderungen gleich durchführe.

Nochmal der Link zum Programm (ZIP sollte hoffentlich kein Problem sein zu entpacken; auch nicht für Linux User):
>> Bitte hier klicken, Downloaden, Drüberschauen und Kommentar posten <<
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 16.05.2009, 22:24    Titel: Antworten mit Zitat

Ansich ok, aber wenn ich bezgl. Absätze zu dir ehrlich bin, wirst du nie wieder glücklich sein...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 18.05.2009, 23:24    Titel: Antworten mit Zitat

Danke für die Rückmeldung!

Ich habe jetzt eine Kleinigkeit hinzugefügt (ProgressBar beim Verarbeiten eines Skripts) und habe aber noch ein paar Fragen bzw. benötige Erklärungen/Tutorials, wie ich folgendes am Besten realisiere:
- Positionieren von Steuerelementen bei Größenänderung des Fensters (deshalb das Fenster mit fixer Größe derzeit)
- Zeilenumbruch in einem MultiLine-Textfeld in FBedit (in der Resourcen-Datei)
- Textbox akzeptiert derzeit die Tabulatortaste nicht
- Aktion beim Druck einer bestimmten Taste ausführen (bzw. dies nur tun, wenn z.B. die Textbox gerade aktiv ist)

Was bedeutet die Warnung
warning 2(1): Passing pointer to scalar, at parameter 4 of SENDMESSAGE()
bei der Anweisung
SendMessage(GetDlgItem(hWnd, lbAusgabe), LB_ADDSTRING, 0, strptr("SQL-Befehl erfolgreich ausgeführt"))
? Ist die Warnung harmlos? Was ist ein Skalar?

Wie positioniert bzw. verkleinert/vergrößert man Steuerelemente nach einer Größenänderung des Fensters? Wie fragt man eine Größenänderung des Fensters ab.

(Übrigens: Ich weiß, es gibt schlaue Bücher zu dem Thema (Petzold, ...), aber wenn ich mein Problem durch Lesen solcher Bücher lösen könnte, würde ich hier nicht fragen. Wenn trotzdem ein Verweis auf ein solches Buch nötig ist, bitte wenigstens mit Kapitel bzw. Seitenangabe, wo ich diese Informationen finden sollte (ob ich es dann verstehe ist wieder ein anderes Thema...))
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 19.05.2009, 00:16    Titel: Antworten mit Zitat

Ein Skalar ist (etwas vereinfacht) eine Zahl (könnte in diesem Zusammenhang aber allgemein ein Variablenwert sein?); d. h. du verwendest wohl einen Pointer dort, wo eigentlich dessen Inhalt erwartet wird.
_________________
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
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 19.05.2009, 13:15    Titel: Antworten mit Zitat

Hi St_W,

zu Positionieren von Steuerelementen bei Größenänderung des Fensters schau mal
http://www.freebasic-portal.de/index.php?s=code&id=29 unter WM_SIZE.

zu SendMessage... genau wie nemored schon geschrieben hat, nicht den Pointer sondern den String als Parameter angeben.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 19.05.2009, 15:47    Titel: Antworten mit Zitat

Danke wieder für eure Antworten.

Folgende Fehlermeldung kommt, wenn ich statt dem Pointer einen String übergebe:
DateiDB.Bas(155) error 55: Type mismatch, at parameter 4 of SENDMESSAGE() in 'SendMessage(GetDlgItem(hWnd, lbAusgabe), LB_ADDSTRING, 0, "SQL-Befehl erfolgreich ausgeführt")'
Hab ich das falsch verstanden?

Danke übrigens für den Link volta, werde mir die Windows-Beispielprogramme ansehen...

Wie kann man eigentlich selber Steuerelemente erstellen bzw. existierende abändern? Ich möchte z.B. eine Menüleiste und Toolbar zu meinem Programm hinzufügen, die so aussieht wie die von Office XP.
Falls jemand Office XP nicht kenne sollte:

_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 19.05.2009, 17:46    Titel: Antworten mit Zitat

verlegen ähh, wenn man nur die Hälfte liest...
Code:
SendMessage(GetDlgItem(hWnd, lbAusgabe), LB_ADDSTRING, 0, Cast(LPARAM, @"SQL-Befehl erfolgreich ausgeführt")'

Der Stringpointer muss als LPARM übergeben werden.

Ich benutze da gerne ein Macro:
Code:
#define LBADDS(h,s)SendMessage(h,LB_ADDSTRING,0,Cast(LPARAM,@s))
....


LBADDS(GetDlgItem(hWnd, lbAusgabe),"SQL-Befehl erfolgreich ausgeführt")

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jojo
alter Rang


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

BeitragVerfasst am: 19.05.2009, 19:03    Titel: Antworten mit Zitat

St_W: Stichwort "ownerdraw". unglaublich unbequeme und hässliche angelegenheit.
_________________
» 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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 19.05.2009, 19:08    Titel: Antworten mit Zitat

Danke, so funktionierts!

Mich interessiert immer noch wie man eigene Steuerelemente erstellt. Ich könnte mir vorstellen, dass das ein etwas größeres Kapitel ist, vielleicht zu lang um es hier zu erklären (Ist das im Petzold zu finden?), wenn jemand aber einen Link zu einem Tutorial, einem Beispielprogramm oder sonst etwas, was mir dabei hilft, so etwas zu realisieren hat, wäre ich froh.

So etwas hätte ich z.B. sehr gerne in meinem Programm:


/edit: hab Jojo's Beitrag gerade gelesen und mich über Google, MSDN, etc. etwas informiert. Danke für das Stichwort, denn bei meinen vorigen Suchversuchen nach "Benutzerdefiniertes Steuerelement erstellen, C" fand ich keine Informationen.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.05.2009, 22:23    Titel: Antworten mit Zitat

Ha!
Wer schöne WGUI Programme mit FB schreiben will, kann das schonmal vergessen! XP-Style ja, aber die tollen WPF, .NET & C# Effekte kannst du erstmal vergessen zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 20.05.2009, 10:05    Titel: Antworten mit Zitat

Schade, dass das nicht so funktioniert, wie ich mir das Vorgestellt habe. Warum es nicht funktioniert würde mich aber interressieren, denn die ganzen C#, .NET, etc. Bibliotheken basieren doch auch auf C (oder?). Und FreeBasic ist von der Funktionalität her ungefähr mit C zu vergleichen. Vielleicht ist es nicht so komfortabel, aber warum geht es überhaupt nicht?

Eine andere Frage: Die Bildschirmkoordinaten, die der GUI-Designer von FBedit anzeigt sind offensichtlich in einer anderen Einheit, als die Funktion MoveWindow verlangt bzw. GetClientRect zurückliefert. Ich habe es derzeit so gelöst, dass ich in X-Richtung mit dem Faktor 1.5 und in Y-Richtung mit dem Faktor 1.62 multipliziere (Werte erpropt). Dies ist natürlich recht unsauber.
Um welche Einheiten handelt es sich da bzw. wie kann ich zwischen den beiden Maßsystemen umrechnen?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 20.05.2009, 12:12    Titel: Antworten mit Zitat

wenn du 1.5 faktoren nutzt könnten das TWIPS / 10 im editor sein .. regulär hat nämlich die VB IDE einen Twips faktor von 15.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 23.05.2009, 20:49    Titel: Antworten mit Zitat

Bzgl. der Einheiten hab ich noch immer nicht in Erfahrung bringen können, welche jetzt genau verwendet werden, bzw. wie man die in Pixel umrechnet oder die Controls in dieser Einheit anspricht. Jendenfalls hab ich jetzt im englischen FB-Forum einmal um Rat gefragt.

Aber ich habe noch ein anderes Problem: ich möchte eine kleine horizontale Leiste in meinem Programm platzieren, auf die man draufklicken und die Größenaufteilung im Fenster ändern kann. Konkret sind oben ein Textfeld und unten eine Listbox - dazwischen sollte so eine dezente Trennlinie rein. Nun möchte ich es so machen, dass man durch verschieben dieser Trennlinie entweder das obige Textfeld größer (bzw. LB kleiner) oder die Listbox größer (bzw. Textfeld kleiner) machen kann.

Welches Steuerelement eignet sich da am Besten?
Aus C#.NET kenne ich MouseMove, MouseOver, MouseOut, MouseClick, MouseDown, ... Ereignisse. Wie komm ich zu sowas in FB?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 23.05.2009, 23:53    Titel: Antworten mit Zitat

Mir fällt nur SCREENEVENT ein, aber das ist wohl nicht das, was du suchst.
_________________
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
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 29.05.2009, 22:38    Titel: Antworten mit Zitat

Aus dem engl. FB-Forum weiß ich jetzt, dass DLU (Dialog Units) als Maßeinheit im FBedit-Designer verwendet werden und diese mittels MapDialogRect umgerechnet werden können.


Aber die in meinem vorigen Beitrag beschriebene Funktion, habe ich noch immer nicht realisieren können.

Gibt es so etwas wie eine ImageBox in C# auch mit std. WinAPI? und wenn ja: Wie lade / zeichne ich da eine kleine Grafik hinein?

Die Funktion mit Draufklicken, Verschieben und wider auslassen hätte ich mit folgenden Funktionen realisiert:
- WM_MOUSEMOVE zum ständigen ermitteln der Mausposition und falls der Cursor über der Leiste ist soll mit SetCursor der Cursor auf den vertikalen vergrößerungspfeil gestellt werden (IDC_SIZENS)
- WM_LBUTTONDOWN zum ermitteln, dass die linke Maustaste gedrückt wurde
- MoveWindow zum verschieben der Leiste bzw. WM_MOUSEMOVE zum abfragen der Cursorposition
- WM_LBUTTONUP zum beenden des verschiebevorgangs
- WM_MOUSEMOVE zum Erkennen, dass der Cursor außerhalb der Leiste ist und mit SetCursor wieder der Standard-Cursor verwendet werden kann (IDC_ARROW).


Nun klingt das ziemlich kompliziert für mich. Geht das auch einfacher? Wenn ja, wie?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.05.2009, 23:31    Titel: Antworten mit Zitat

Bei der GUI Programmierung mit C ist alles aufwändig und kompliziert. Und verbuggt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 30.05.2009, 13:29    Titel: Antworten mit Zitat

Das es mit C (bzw FB) schwieriger ist, als z.B. C# .NET hab ich schon mitbekommen und klingt auch logisch.

Aber warum Verbundglas? Die ganzen Bibliotheken (wie z.B. MFC oder .NET) müssen ja auch wieder irgendwie auf die WinAPI im Hintergrund zugreifen. Oder bauen die auf etwas anderem auf?

Kann man in C nicht ebenso alles realisieren, was man z.B. in C# machen kann? Es ist mir klar, dass es wahrscheinlich nicht so einfach funktioniert, aber funktionieren müsste es schon. Man könnte ja auch mit Assembler alles programmieren, was man mit C / C++ machen könnte - es ist nur deutlich komplizierter.
Oder ist das im Fall der GUI Programmierung nicht so?

Was anderes: Vielleicht hätte einer von unseren WinAPI-Profis hier und da kurz Zeit mir einige Fragen über ICQ, MSN oder Skype zu beantworten? Ich hätte viele Fragen, auf die ich über diverse Foren nur sehr mühsam und mit großem Zeitaufwand die Antworten finde. Ich wäre auch gern dazu bereit mich bei irgend einem anderen Messenger anzumelden, wenn euch ein anderer lieber ist. Wer Zeit und Lust hat: einfach per PM oder über ICQ anschreiben.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 30.05.2009, 15:36    Titel: Antworten mit Zitat

Eigentlich setzt inzwischen eher die WinAPI auf .NET auf... nein Scherz, aber die Abstraktion von .Net auf WAPI geschieht im .Net Framework - und das wird von mehreren hundert Entwicklern betreut...

Vergiss einfach GUI Programmierung mit FB.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 31.05.2009, 18:07    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Vergiss einfach GUI Programmierung mit FB.

So leicht gib ich mich nicht geschlagen lächeln
Es gibt ja bereits tolle Programme mit toller Oberfläche, wie z.B. FBedit, die auch in FreeBasic programmiert wurden.

Jedenfalls gibts wieder eine Version mit mit einer kleinen Änderung, aber viel Aufwand: Mit einer Leiste (die derzeit einfach ein Fensterrand ist, weil ich nicht weiß, wie man ein Bild einfügt) kann die Fensteraufteilung geändert werden. Seht einfach selbst, es ist schwer zu beschreiben.

>> neue Version herunterladen, ausprobieren, Kommentare (Verbesserungsvorschläge, Kritiken, etc.) posten <<
(Derzeit ist sowohl die EXE, als auch der Quellcode mit dabei. Falls den Quellcode jemand brauchen könnte, darf er ihn frei verwenden. Wie das Programm unter Linux mit dem Windows-Emulator Wine funktioniert konnte ich noch nicht testen, denk aber schon, dass es funktionieren müsste, da ich nur grundlegende Elemente verwende.)

Achja: Da ich vorhabe das Programm auch im englischsprachigen FB-Forum vorzustellen und etwas Fragen werde, hab ich ziemlich alles auch in engl. übersetzt und einfach in Klammern dazu geschrieben. (Ich weiß, das ist eine der schlechtesten Methoden zum übersetzen eines Programms, aber mir geht es ja derzeit nicht um die Funktionalität, sondern um die Oberfläche).

Jedoch gibt es mit der Methode, wie ich sie jetzt zum verschieben der Trennlinie verwende noch einige Probleme. Die Leiste kann man z.B. nur im eigenen Fenster und nur sehr langsam verschieben. Wenn man die Maus zu schnell bewegt funktioniert es nicht. Wie kann man ein Verschieben der Trennlinie so realisieren, wie es z.B. in FBedit beim Ändern der Größe der Seitenleiste bzw. des unteren Statusfensters funktioniert?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
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 -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 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