AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte WatchKit... (Uhren Baukasten)

WatchKit... (Uhren Baukasten)

Ein Thema von EWeiss · begonnen am 9. Jun 2018 · letzter Beitrag vom 19. Jun 2018
Antwort Antwort
Seite 2 von 10     12 34     Letzte » 
Benutzerbild von EWeiss
EWeiss
Registriert seit: 16. Okt 2010
Eine Anwendung mit der man seine Analoge Uhr selbst zusammenstellen kann.
*62

v1.0.0 (12 Jun 2018)
- first release
- source include

v1.0.1 (16 Jun 2018)
- Add Menu mit verschiedenen Funktionen wird sichtbar beim rechts klick auf einem Objekt)
- Add DragDrop
- Add Snap Funktion zum Uhr Blatt
- Add Color, Zoom, Rotate Funktion (neues Window)
- Alle Zeiger haben nun das richtige Format zum Uhren Blatt
- paar neu Uhren addiert
- jedes Objekt kann eine neue ZOrder erhalten
- Objekt kann jetzt gelöscht werden.
- Menu Problem behoben verwende jetzt ein eigenes, Window basierend. (Danke für die Meldung, KodeZwerg)

v1.1.0 (18 Jun 2018)
- Mirrors addiert
- Flare, BlurFlare Effekt addiert
- Alle Zeiger nochmals in der breite verändert (drastische CPU Reduzierung ist im Original nun 0% wenn sie läuft)
- Funktionalität der Uhr ist nun gegeben.
- Es kann nur noch jeweils ein Objekt vom gleichen typ addiert werden
Wenn ein neues Uhrzeiger Blatt als Beispiel.. auf das Working Area gezogen wird dann wird das vorherige ersetzt.
Wenn die Uhr läuft und das Blatt wird ersetzt dann werden alle Objekt die eine höhere Order haben gelöscht.
- Wird die Uhr gezoomt dann verändern sich auch die Zeiger dementsprechend.
- Beim verändern der Farben muss jedes Objekt von dem die Farbe geändert werden soll den Focus haben.
Den Hintergrund des Working Area habe ich von der Farbveränderung ausgeschlossen.
- Das ist die Finale Version.

v1.1.1 (19 Jun 2018)
- Spinner addiert
- BlurFlare Offset war falsch Problem behoben
- Hintergrund des Working Area konnte ausgewählt werden Problem behoben
- Objekte können nicht mehr gezoomt oder gedreht werden wenn verschlossen.
- Letzte Objekt im Array wurde nicht addiert Problem behoben.

gruss
Miniaturansicht angehängter Grafiken
fertig2.jpg  
Angehängte Dateien
Dateityp: zip Watcheskit.zip (4,19 MB, 14x aufgerufen)

Geändert von EWeiss (19. Jun 2018 um 14:41 Uhr)
 
mensch72
 
#11
  Alt 10. Jun 2018, 10:50
..."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"...
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#12
  Alt 10. Jun 2018, 11:31
Zitat:
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"...
Ich gebe mir mühe

gruss

Geändert von EWeiss (16. Jun 2018 um 22:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#13
  Alt 11. Jun 2018, 20:31
Ich klicke auf ein Uhr Blatt danach schicke ich eine Message um das Fenster verschieben zu können.
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)

EDIT:
So erstelle ich das Teil.
Delphi-Quellcode:
{$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}
Wenn ich jetzt in meiner Winproc eine Message addiere um beim verschieben des Fensters das Image mit zu verschieben

Delphi-Quellcode:
WM_MOVING:
  SetDropImage(bla, bla);
um ein neu zeichnen zu erzwingen nutzt das auch nichts das Image bleibt stehen wo es steht.
Hmmm. Sieht so aus als wenn ich HTCLIENT dafür nicht verwenden kann. grrr..


gruss
Miniaturansicht angehängter Grafiken
move.jpg  

Geändert von EWeiss (11. Jun 2018 um 20:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

 
Delphi 2009 Professional
 
#14
  Alt 11. Jun 2018, 21:31
Vielleicht bei Drag Begin mit GetCapture die Maus abfangen und bei Drag End ReleaseCapture?
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#15
  Alt 11. Jun 2018, 21:36
Vielleicht bei Drag Begin mit GetCapture die Maus abfangen
und bei Drag End ReleaseCapture?
Neee..

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:
    
    UpdateLayeredWindow(WinHandle, DesktopDC, @lP, @ls, hMemDC, @ptSrc, 0, @bf, ULW_ALPHA);
    Magnetic.SetFullWindowDrag(WinHandle, true); // <<<<<
  end;

  DeleteObject(hBmp);
  DeleteDC(hMemDC);
  ReleaseDC(0, DesktopDC);
und in der Proc
Delphi-Quellcode:
    WM_DESTROY:
      begin
        Magnetic.SetFullWindowDrag(WinHandle, false); // <<<<<<
        PostQuitMessage(0);
        Result := 0;
        exit;
      end;
Und das Ergebnis!

gruss
Miniaturansicht angehängter Grafiken
zeiger.jpg   uhrenblatt.jpg  

Geändert von EWeiss (11. Jun 2018 um 23:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#16
  Alt 12. Jun 2018, 16:55
first release.

Aber ist noch genug zu tun!
Drop ist in Bearbeitung.. Es tut sich also noch nicht so viel

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

 
Delphi 2009 Professional
 
#17
  Alt 12. Jun 2018, 17:35
Zitat:
Sollten irgendwelche wünsche eurerseits kommen werden ich sie implementieren wenn möglich.
Ich hätte da einen um einen Mehrwert für Otto-Normalos rauszuholen, ein Widget Ableger was den selektierten Shape laden kann oder als Bildschirmschoner im Großformat? Oder weder noch
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#18
  Alt 12. Jun 2018, 19:39
Zitat:
Sollten irgendwelche wünsche eurerseits kommen werden ich sie implementieren wenn möglich.
Ich hätte da einen um einen Mehrwert für Otto-Normalos rauszuholen, ein Widget Ableger was den selektierten Shape laden kann oder als Bildschirmschoner im Großformat? Oder weder noch
Muss die Zeiger in der Größe noch anpassen.. viel Arbeit.
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
Aber vorher den Thumbs Ordner löschen!

gruss
Miniaturansicht angehängter Grafiken
irgendwas.png  

Geändert von EWeiss (12. Jun 2018 um 20:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

 
Delphi 2009 Professional
 
#19
  Alt 12. Jun 2018, 20:08
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!
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

 
Delphi 2010 Architect
 
#20
  Alt 12. Jun 2018, 23:32
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;
  gaSprite: TGaSprites;

Ich fülle den record.

Delphi-Quellcode:
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;
Wenn ich jetzt in meiner Proc den Record vergleichen will ist der Record leer.

Delphi-Quellcode:
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;
Warum?
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
Miniaturansicht angehängter Grafiken
mehralseins.jpg  

Geändert von EWeiss (13. Jun 2018 um 00:33 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf