Gigabyte i-RAM

By newq | September 13, 2005
Under: Uncategorized
Comments: No Comments »


Hardware RAM-Disk mit Akku.

Autorun von Webseiten

By dose | September 11, 2005
Under: technical stuff, Uncategorized
Comments: No Comments »

Eine häufige Problemstellung: Man stellt eine WerbeCD zusammen mit Seiten im HTML-Format zur bequemen Navigation.
Nun möchte man auch gleich eine passende Autorun-Funktion dafür haben.
Autorun dürfte Jedem bekannt sein: Einfach eine autorun.inf – Datei anlegen und dort einen kleinen Dreizeiler reinschreiben:

[autorun]
icon=meinicon.ico
open=ZuStarten.exe

Die erste Idee, die Einem in den Sinn kommt, ist, warum nicht einfach die Startseite beim open= angeben? Also z.B.: open=index.htm
Der Windows 2000+ Benutzer wird er ausprobieren und zufrieden lächeln – Funktioniert!
Tja, aaaaber leider erst ab den Shell Common Controls 5.0, also erst ab Win2k.
Besitzen von Win 9x/NT 4 kommen nicht in den Genuss eines praktischen Autostarts.
Um auch diese OS-Versionen zu unterstützen braucht man also einen kleinen launcher, der die angegebene HTML-Seite im Standard-Browser startet.
Hierfür gibt es im Internet diverse Freeware-Applikationen, die sich aber für kommerzielle Massen-Distribution aufgrund der verwendeten Lizenz evtl. nicht eignen.
Aus diesem Grund starten wir mal wieder VC++ und basteln uns kurzerhand unseren eigenen Starter, den wir dann nach Belieben verwenden können:

Der Grundansatz ist, einfach zu prüfen, mit welchem Startprogramm die übergebene Datei verknüft ist, und dieses wird dann mit Datei+Pfad als Parameter gestartet. Dieses Konzept hat auch noch den Vorteil, dass unsere kleine Applikation universell einsetzbar ist für alle Dateitypen, nicht nur .html Dateien.
Wenn man das nachstehende Programm kompiliert sollte man mittels geeignetem Makefile eine 16k kleine .exe erhalten. Diese würde sich mit UPX oder anderen EXEpackern auf ~3k herunterkomprimieren lassen, allerdings wird das dann lizenztechnisch wieder problematisch..
Genug geschwafelt, hier ist das kleine Programm:

Es nimmt als Parameter ein zu strtendes file. Wird nichts übergeben, wird versucht, die
index.html zu starten.

gameboy music club @ wohnt und spielt in ottakring

By newq | September 10, 2005
Under: Uncategorized
Comments: No Comments »

ich möchte darauf hinweisen, dass der gameboy music club (ich auch) am nächsten dienstag, dem 13. september ab 19:30 vor der fun und sport halle (Gallitzinstraße 4) im rahmen von “wohnt und spielt in ottakring” spielt, nachher gibt’s dann noch den schaua (von dotmatrix) und sugar b in der vorstadt.
bitte kommts ausnahmsweise mal wer und das zahlreich!

Nachtrag Gürtel Night Walk

By newq | September 10, 2005
Under: Uncategorized
Comments: No Comments »

nicht dass ich viel zu Fuß abgelaufen wäre – ich war ja nur rund um rhiz, chelsea und co. unterwegs und da belichteten die meisten Fotos auch noch andere Geschehnisse mehr oder weniger abseits. Also hier ein kleiner Auszug dessen was ich eingefangen habe. mehr kommt vielleicht – vielleicht auch nicht.
Zu meiner Verteidigung, ich hatte einen 50ASA – und zu ersten mal nicht C-41 – Schwarzweissfilm eingespannt. Da mir hilft selbst das 1.8er 50mm Objektiv nicht.


dot.matrix in action.
newq, ich will da mp3s haben. bitte!!


rhiz all stars


Konzert und Installation rund um Nähen und Nähmaschinen und das was Leute dabei verdienen – oder eben nicht.(die sound untermalung war grauenvoll, die Maschinen selber super – ich hab auch eine livegenähte Tasche ergattert!)


Gürtel in Action – ich musste sowas mit dem Film probiern 🙂


der hats nicht überlebt. war lustig anzusehn wie die leute über den armen teufel gesolpert sind (mit einem mehr oder weniger lauten IIHHHHH)

@newq deine Mediendatenbank funkt gaga – nämlich gar nicht…
anyway.
ich hab urlaub und das mit recht!

Minimalgröße eines Fensters setzen

By dose | September 9, 2005
Under: technical stuff, Uncategorized
Comments: No Comments »

Wenn man einen resizable Dialog erstellt, dann ist man natürlich daran interessiert,
dass sich die Dialog-Controls entsprechend an die aktuelle Fenstergröße anpassen und der
neu entstehende Raum im Dialogfeld nicht ungenutzt bleibt.
Dummerweise ist dies garnicht so einfach, da es von der WIN32-API nativ keine Docking bzw. Anchoring-Unterstützung gibt. Man muss einfach die WM_SIZE Nachricht dispatchen und dort die controls (=child windows) entsprechend neu zeichnen. Dies ist insofern ärgerlich, als dass es eine ziemliche Herumfitzelei ist, und sobald man etwas am Form-design ändert, funktioniert der Code möglicherweise schon nicht mehr. Daher haben sich einige Programmierer daran gemacht, Klassen zur Lösung dieses Problems zu schreiben. Dummerweise sind die meisten erhältlichen Klassen aber für die MFCs. Wenn man diesen Ballast aber nicht mit seiner Applikation herumschleppen möchte, und sich ohnehin, wie ich etwa, nicht so recht mit der etwas chaotischen MFC anfreunden mag, sucht man relativ lange, bis man etwas Brauchbares findet. Ich bin beim Stöbern im Netz auf eine brauchbare Klasse gestoßen, die klein, aber trotzdem praktisch und einfach aufgebaut ist. Grundsätzlich werden darin zwar auch MFC Debug-Makros verwendet, aber die kann man ja ohne Bedenken löschen. Sonst funktioniert die Klasse eigentlich problemlos mit plain-WIN32. Hier ist sie:

http://www.codeguru.com/Cpp/W-D/dislog/resizabledialogs/article.php/c5001/

Ich habe sie übrigens selbst für mich auch noch etwas optimiert, damit das Flackern beim Resizen nicht ganz so stark ist. Der Trick besteht darin, statt SetWindowPos lieber die Funktion DeferWindowPos zu verwenden. Für nähere Erläuterungen zur Funktionsweise mitte dem Link zur MSDN folgen.

Wenn man nun die Controls entsprechend dockt, bleibt immer noch das Problem, dass man die Form kleiner machen kann, als sie in ihrem Initialzustand war, und das sieht dann doch ziemlich merkwürdig aus, wenn die Controls gegenseitig überlappen. Daher sollte man idealerweise die Fensterminimalgröße auf die Anfangsgröße limitieren. Damit man diese nicht hartcodieren muss, bedient man sich einfach einer static-Variable, die den Initialzustand des Fensters speichert, somit ist man auch hier flexibel. Hier mein Code hierfür:

heast dose….

By newq | September 8, 2005
Under: Uncategorized
Comments: No Comments »

… wüst du uns va-oarschen!?

“In C funktioniert’s natürlich dementsprechend noch einfacher, das kann sich aber dann ohnehin Jeder selbst basteln:”

😛

Size grip in Fenstern

By dose | September 7, 2005
Under: technical stuff, Uncategorized
Comments: No Comments »

Heute gibt’s einen Artikel über die Lösung eines eigentlich trivialen Problems:
Seit Win2k, wenn ich richtig informiert bin, gibt es ja die Möglichkeit, einen sg. “size grip” in der unteren, rechten Ecke eines Fensters anzuzeigen, um zu verdeutlichen, dass es sich dort schön resizen lässt. Das schaut nett aus und vergrößert auch etwas die Fläche, in der der Maus-cursor zum Resize-cursor wird. Seinen eigenen Fenstern diesen Style zu geben ist aber garnicht so trivial.. Im Prinzip müssen v.A. 3 Dinge beachtet werden:

1) Das Ding gehört gezeichnet. Dies wird in WM_PAINT erledigt.
2) Beim Ändern der Fenstergröße muss der Grip auch gelöscht werden, damit er beim neu zeichnen nicht “verschmiert”. Das erledigen wir in WM_SIZING, also noch, bevor die Größenänderung passiert ist.
3) Dem Grip muss auch eine Funktionalität zugeordnet werden, sodass der Cursor entsprechend zum Resize-cursor wird, wenn sich die Maus auf dem Grip befindet. Hierfür tracen wir das Maus-Event in WM_NCHITTEST

Beim Zeichnen des Grips muss zusätzlich darauf geachtet werden, dass dieser im maximierten Fensterzustand nicht gezeichnert wird.
Ich habe in folgendem Codeschnipsel die oben genannten Punkte zusammengefasst, wie man sie in der Window-Dispatcherroutine zu behandeln hat, um den gewünschten Effekt zu erzielen. Viel Spaß!

UTF8 – Decoding unter WIN32

By dose | September 7, 2005
Under: technical stuff, Uncategorized
Comments: 1 Comment »

Heute gibt es mal eine Lösung zu einem relativ trivialen Problem, welches aber oft unnötigerweise durch Zuhilfenahme zusätzlicher, externer Bibliotheken gelöst wird:
Die UTF-8 Konvertierung.
Windows verwaltet intern alles durch seine wchars, welche 16bit zur Darstellung eines Zeichens benötigen. Die Konvertierung von UTF-8 in die derzeit benutzte system-locale führt daher auch über WideChars:
Zuer konvertiert man mit MultiByteToWideChar UTF-8 auf wchar und anschließend mittels WideCharToMultiByte auf die aktuelle locale. Mit dieser Kombination lassen sich natürlich auch andere Zeichensätze bequem konvertieren.
Im Folgenden eine kleine C++ Beispielfunktion, die einen basic_string UTF8-decodiert.
In C funktioniert’s natürlich dementsprechend noch einfacher, das kann sich aber dann ohnehin Jeder selbst basteln:

Versionsinformationen auslesen

By dose | September 3, 2005
Under: technical stuff, Uncategorized
Comments: No Comments »

Oft implementiert man in seine Applikation einen About-Dialog, in dem man sich nicht nur selbst verewigt, sondern auch die Programmversion usw. anzeigt.
Hardcodet man nun diese Information, so hat man hier unnötige Doppelgleisigkeiten, da man die Versionsnummer normalerweise ja schon in der Versioninfo-Resource angibt.
Bei einem Programmupdate müsste man dann immer 2 Werte ändern, was man häufig vergisst.
Die Idee ist daher naheliegend, dass man sich für seinen About-Dialog gleich die Versionsinformationen aus der Versioninfo-Resource extrahiert. Unglücklicherweise ist dies weniger trivial, als man viell. ursprünglich annehmen möchte. Generell sollte man sich hierfür die Hilfe zur VerQueryValue-Funktion ansehen.
Hier sind auch die Strings beschrieben, die man aus der Versioninfo auslesen kann.
Nachdem für die Benutzung dieser Funktion jedoch einige Vorarbeiten notwendig sind, ist es praktisch, die Versionsabfrage in eine Klasse zu kapseln, welche im Konstruktor die Extraktion der Resourcen zur weiteren Verwendung durch VerQueryValue übernimmt und im Destruktor den Speicher wieder frei gibt.
Ich habe daher eine kleine Klasse implementiert, die diese Aufgabe übernimmt:

Diese lässt sich relativ bequem dann in der Window-Procedure the About-Dialogs einsetzen:

LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
    case WM_INITDIALOG:
    {
      try {
        char szDestBuf[256];
        QueryResource qr;

        _snprintf (szDestBuf, sizeof (szDestBuf), "%s\nVersion %s\n\n%s - %s\n\nAuthor: dose", qr.GetValue ("ProductName"), qr.GetValue ("ProductVersion"), qr.GetValue ("LegalCopyright"), qr.GetValue ("CompanyName") );
        SetDlgItemText (hDlg, IDC_VERSION, szDestBuf );
      }
      catch (QueryResource::xError) {}
      catch (bad_alloc) {}
      return TRUE;
    }
    case WM_COMMAND:
      switch (LOWORD(wParam))
      {
        case IDOK:
          EndDialog(hDlg, 0);
          break;
      }
      break;
    }
  return FALSE;
}

#tkwg Treffen!

By newq | September 2, 2005
Under: Uncategorized
Comments: No Comments »

ABGESAGT/VERSCHOBEN AUF NÄCHSTE WOCHE!

*Terminvorschlag: Fr. 2005-09-16 ~20:00
*Lokalvorschlag: Tunnel (Florianigasse 39, 1080 Wien)

Das Lokal bietet sehr günstige Preise, große Tische und is mit J Bim vom Karlsplatz aus super zu erreichen (vom Gürtel aus auch irgendwie). Zum später irgendwoanders hingehn gibts in der Umgebung Milliarden andere Lokale.

Anmeldungen, Absagen und Alternativtermine bitte als Kommentar!