![]() |
AW: WatchKit... (Uhren Baukasten)
..."usw..
Interessant wäre so etwas für Firmen die Uhren verkaufen.. Wenn man deren Bausätze hätte Armband usw.. was dazu gehört könnte man sich eine Uhr nach gefallen zusammen stellen und diese Anfertigen lassen. Ein Speichern der Zusammenstellung als PNG würde reichen und die Uhr ginge im Auftrag."... In Zeiten von Smarthome... mal um die Ecke gedacht: Da gibt es aktuell einige Herstellen mit Möglichkeiten von "UserDefinedDesigns" im herkömmlichem "Sinne von Schalterprogrammen" (also ala Jung,Gira,B&J,Merten,..) Einige bieten das aktuell via teuren Displays, welche wie gewünscht programmiert werden, andere lösen es über "fast belibige frei wählbare Oberflächen, wo Symbole/Rahmen/Text/"Tasten" graviert oder gelasert werden, um dann entweder frei via RGB oder per gewählten bis zu 2 oder gar 3Festfarben(Weiß,Blau,Gelb,Rot,Grün) hinterlauchtet werden... da könnte sicher jeder Häuslebauer, Innenarchitekt, "Lichtdesigner", Hotelchef,... seine Sachen quasi selbst gestalten und Muster oder Serie in Auftrag geben. Statt beleuchter/animierter Zeiger gäbe es da eben schick dargestelltes "Day/Night-Ambiente", "StandBy,Active/Inactive-Mode" ... wenn der Baukasten flexiblen Output hat, kann der Smartphone Generation ne App/Web Anzeige gebastelt werden, wo visuell exakt die gleichen "Schalter" wie real an der Wand zur Bedienauswahl verfügabr sind... das spart dieser Generation das Aufstehen vom Sofa/Sessel:) Wenn die GrafikEngine und EffektDesign wie von Emil gewohnt universell und gut umgesetzt werden, sehe ich da also keine Beschränkung für "Uhrenbaukästen"... :thumb: |
AW: WatchKit... (Uhren Baukasten)
Zitat:
gruss |
AW: WatchKit... (Uhren Baukasten)
Ich klicke auf ein Uhr Blatt danach schicke ich eine Message um das Fenster verschieben zu können.
Delphi-Quellcode:
PostMessage(hDrop, WM_NCLBUTTONDOWN, HTCAPTION, MAKELONG(y, x));
Diese wird in meiner WinProc nicht weiter behandelt. Das Fenster kann ich jetzt verschieben das Problem ist nur das mein Image das ich vorher in diesen Fenster erstellt habe wird nicht mitgezogen. Jemand eine Idee wie ich das trotzdem verwirklichen könnte? Siehe Anhang! (Die Qualität ist natürlich besser wird aber leider hier nach *.jpg konvertiert) :evil: EDIT: So erstelle ich das Teil.
Delphi-Quellcode:
Wenn ich jetzt in meiner Winproc eine Message addiere um beim verschieben des Fensters das Image mit zu verschieben
{$REGION 'SetDropImage'}
procedure SetDropImage(WinHandle: HWND; gSprite: ISkinSpriteContainer; filename: string; Alpha: Integer); var Graphics, Img, ImgW, ImgH: Cardinal; Count: Integer; hMemDC, DesktopDC: HDC; hBmp: HBitmap; rw: TRect; bf: BLENDFUNCTION; lP, ptSrc: TPoint; ls: size; begin hMemDC := 0; DesktopDC := 0; hBmp := 0; GetWindowRect(WinHandle, rw); ls.Cx := rw.Right - rw.Left; ls.Cy := rw.Bottom - rw.Top; lP.x := rw.Left; lP.y := rw.Top; ptSrc.x := 0; ptSrc.y := 0; Img := gSprite.gLoadImageFromFile(PWideChar(filename), ImgW, ImgH, 0); if Img <> 0 then begin DesktopDC := GetDC(0); hMemDC := CreateCompatibleDC(DesktopDC); hBmp := CreateCompatibleBitmap(DesktopDC, ImgW, ImgH); Count := ImgW div ImgH; if ((Count * Integer(ImgH)) = Integer(ImgW)) then ImgW := ImgH; SelectObject(hMemDC, hBmp); if (GDIP_CreateFromHDC(hMemDC, Graphics) = OK) then begin GDIP_SetInterpolationMode(Graphics, InterpolationModeHighQualityBicubic); GDIP_DrawImageRectRectI(Graphics, Img, 0, 0, ls.cx, ls.cy, 0, 0, integer(ImgW), integer(ImgH), 2, nil, false, nil); GDIP_DeleteGraphics(Graphics); GDIP_DisposeImage(Img); end; bf.BlendOp := AC_SRC_OVER; bf.BlendFlags := 0; bf.AlphaFormat := AC_SRC_ALPHA; bf.SourceConstantAlpha := Alpha; UpdateLayeredWindow(WinHandle, DesktopDC, @lP, @ls, hMemDC, @ptSrc, 0, @bf, ULW_ALPHA); end; DeleteObject(hBmp); DeleteDC(hMemDC); ReleaseDC(0, DesktopDC); end; {$ENDREGION}
Delphi-Quellcode:
um ein neu zeichnen zu erzwingen nutzt das auch nichts das Image bleibt stehen wo es steht.
WM_MOVING:
SetDropImage(bla, bla); Hmmm. Sieht so aus als wenn ich HTCLIENT dafür nicht verwenden kann. grrr.. gruss |
AW: WatchKit... (Uhren Baukasten)
|
AW: WatchKit... (Uhren Baukasten)
Zitat:
Es gibt bei mir kein Begin Drag. Zudem erstelle ich ein Window das ich zwischen verschiedenen Containern hin und herschiebe da kann man deine verlinkten API's nicht für verwenden (Die mir bekannt waren ) ;) Ich habe es schon gelöst.. Danke. HTCLIENT.. in Verbindung mit FullDrag In SetDropImage
Delphi-Quellcode:
und in der ProcUpdateLayeredWindow(WinHandle, DesktopDC, @lP, @ls, hMemDC, @ptSrc, 0, @bf, ULW_ALPHA); Magnetic.SetFullWindowDrag(WinHandle, true); // <<<<< end; DeleteObject(hBmp); DeleteDC(hMemDC); ReleaseDC(0, DesktopDC);
Delphi-Quellcode:
Und das Ergebnis!
WM_DESTROY:
begin Magnetic.SetFullWindowDrag(WinHandle, false); // <<<<<< PostQuitMessage(0); Result := 0; exit; end; gruss |
AW: WatchKit... (Uhren Baukasten)
first release.
Aber ist noch genug zu tun! Drop ist in Bearbeitung.. Es tut sich also noch nicht so viel :) gruss |
AW: WatchKit... (Uhren Baukasten)
Zitat:
|
AW: WatchKit... (Uhren Baukasten)
Zitat:
DrapDrop fertig machen. Das fertige Werk dann zum laufen bringen und, und, und ;) Dann werde ich mich darum kümmern ob man aus der EXE zur Laufzeit aus dem Widget eine eigenständige Anwendung kompilieren kann. Keine Ahnung ob so was überhaupt möglich ist ohne Delphi installiert zu haben. Denke mal nicht. Im Moment habe ich erst mal das Grund Konzept herausgearbeitet so hat man eine Ahnung was am ende herauskommen soll. Sind schon mal weit, weit mehr als 2000 Zeilen Code. Muss ja alles selber machen Grafik sowie Programmierarbeit. Hobby halt! :) Hat keine Eile ;) Zu guter Letzt das Projekt könnte man auch als Widget Designer sehen denn welche Objekte man am ende kombiniert ist abhängig davon welches Bitmap Format (Design) man verwendet. Zur zeit fallen mir als Beispiel.. Kalender, Geburtstagskarten, Fotoalbum ein das könnte man zusammen stellen und als eine *.png Datei abspeichern und ausdrucken. Wie auch immer. Eventuell mache ich das Fenster nachher noch in der Größe änderbar dann hat man mehr platz innerhalb des Working Area EDIT: Werfe mal irgendeine *.png Datei in den Face Ordner dann weist was ich meine :cyclops: Aber vorher den Thumbs Ordner löschen! gruss |
AW: WatchKit... (Uhren Baukasten)
Für irgendwann später, ich dachte es mir so, dein Baukasten legt eine Ini an mit den von User bestimmten Shapes für Zeiger, Ziffern, Position etc. Wenn man Widget oder Bildschirmschoner startet nutzen die auch die Ini. Das wäre zumindest eine Variante :-)
Aber jetzt erst mal Dein Grundgedanken weiter machen, das sieht ja schon mal alles sehr ansprechend aus! |
AW: WatchKit... (Uhren Baukasten)
Wieder so ein blödes Problem.
Mein Record wird wieder mal gelöscht.
Delphi-Quellcode:
GaSprites = packed record
ID: Integer; objtype: Integer; filename: string; end; TGaSprites = array of GaSprites;
Delphi-Quellcode:
gaSprite: TGaSprites;
Ich fülle den record.
Delphi-Quellcode:
Wenn ich jetzt in meiner Proc den Record vergleichen will ist der Record leer.
procedure GetArraySprite(ID: Integer);
var Item: TgObj; begin // Ruft alle Details zu einem Sprite-Objekt in einem einzigen Schritt ab. gSprKit.GD_GetObjectProperties(ID, Item); // Identifikations ID des Sprite Objekt gaSprite[ID].ID := ID; // Der Objekttyp (Bitmap, Text, Pfeil, Kurve, Rechteck, Ellipse, Polylinie) gaSprite[ID].objtype := Item.objtype; // Freundlicher Name gaSprite[ID].fname := Item.objlabel; end;
Delphi-Quellcode:
Warum?
for K := 0 to SpriteCount do
begin if (gaSprite[K].filename = sDropName) and (gaSprite[K].ID > -1) then begin Result := DefWindowProc(WinHandle, Msg, wP, lP); // Redimensionieren wenn filename gleich ist SetLength(gaSprite, K + 1); // Window zerstören DestroyWindow(WinHandle); // Raus hier.. LOL super Kommentar exit; end; end; Ich setze das Array nirgendwo zurück.. Nur die Daten im record sind weg. Das hat dann zur folge das ich mehr als ein UhrBlatt addieren kann. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz