Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TAppButton - Application Button like Firefox (experimentell) (https://www.delphipraxis.net/163957-tappbutton-application-button-like-firefox-experimentell.html)

Satty67 23. Okt 2011 19:11

TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

übers Wochenende hatte ich Lust, mich an einem Application Button zu versuchen, wie ihn z.B. Firefox anbietet.

Status-Übersicht:
  • Noch experimentell, lange nicht fertig
  • Aktuell klinke ich mich in WindowProc des TrägerForm ein (schien mir am einfachsten), andere Vorschläge willkommen
  • Gezeichnet wird nicht direkt auf NC, sondern in ein Bitmap, dass ich dann kopiere. Ist eine Vorbereitung auf was noch geplant ist, also Absichtlich so umständlich.
  • Windows 7 konnte ich übers WE nicht testen, kann sein das es da noch nicht passt

Noch bekannt Probleme:
  • Flackert beim Resize des Form
  • Ecken noch nicht transparent (lösbar, eine einfache Lösung aber willkommen)
  • Auswerten der Messages in WindowProc noch etwas verwirrend gelöst
  • Button-Optik noch etwas hölzern, passt zwar ganz gut zu XP, aber unter Win 7 sicher nicht so schön.

Ist jetzt einfach nur ein experimenteller Vorschlag, für so einen AppButton. Hatte einach nicht fertiges gefunden.

PS: Falls es sich nicht von selbst erschließt, Anwendungs-Beispiel:
Delphi-Quellcode:
AppButton := TAppButton.Create(self);
AppButton.DropDownMenu := PopupMenu1;
AppButton.Caption := 'Ich bin ein AppButton';
PPS: Warum ich das halbfertig poste: Das Wochenende ist vorbei und weil es nur aus einer Laune heraus entstanden ist, versinkt es sonst wohl im Übungsordner... so wird vieleicht was draus.

Stevie 23. Okt 2011 19:36

AW: TAppButton - Application Button like Firefox (experimentell)
 
Eventuell ist dieser Thread interessant für dich.

Satty67 23. Okt 2011 20:33

AW: TAppButton - Application Button like Firefox (experimentell)
 
Ja, sehr interessant. Muss mir wohl endlich eine Aero-fähige Win 7 Testumgebung anschaffen.

Sieht so aus, als ob man je nach Windowsversion unterschiedlichen Code implementieren muss. Wie das Beispiel weitgehenst innerhalb der Komponente (und nicht im Form) umgesetzt werden kann, wird sicher interessant.

ConnorMcLeod 24. Okt 2011 06:45

AW: TAppButton - Application Button like Firefox (experimentell)
 
Da war doch mal was ... ist schon länger her ... kram, such, stöber ... ahja, hier. Dort sind vllt ein paar helfende Ideen dabei.

Satty67 24. Okt 2011 15:04

AW: TAppButton - Application Button like Firefox (experimentell)
 
Also die Idee, einfach den Button über die Caption zu "klatschen" kann ich begraben. Beide Links (die Infos darin) und ein Test eben zeigen, dass bei Glass-Frames nicht mehr direkt gezeichnet werden kann.

Firefox scheint das komplette NC-Area selbst zu zeichnen (bei 7.x sogar fehlerhaft), das werde ich wohl auch müssen. Zum einen werde ich anders das Flackern nicht wegbekommen und unter Windows 7 ist es wohl sowieso nötig.

In der Win 7 VM kann ich leider den Glass-Frame nicht aktivieren und das testen. Werde aber trotzdem mal dran machen die verlinkten Beispiele umzusetzen. Werde das erstmal gesplittet nach Windows-Version/Darstellung entwerfen und danach schauen, was sich an Code zusammenwerfen lässt.

Satty67 28. Okt 2011 19:38

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

zuerst mal muss man ja Chris Rolliston für seinen Beitrag (Link von Stevie) dankbar sein. War sicher eine ziemliche Arbeit die ganzen Infos zu sammeln und daraus eine Demo zu bauen. Scheint auch tatsächlich der aktuell gegangene Weg für einen AppButton zu sein (also Titelbar ausblenden und im ClientBereich neu zu zeichnen)

Aber ich wollte den AppButton für eine kleine Multimedia-Anwendung... der Beispielcode ist fest im Mainform integriert, noch nicht für XP/Classic erweitert und trotzdem schon fast umfangreicher, als mein restlicher Projekt-code ;-)

Es musste für meinen Fall eine andere, einfache Lösung her...

Zufällig ist mir die Tage beim Zeichnen mit Paint.NET das Verhalten der Tool-Windows ins Auge gestochen. Mir kam also die Idee, ein Toolwindow in den Titlebar-bereich einzublenden. Entweder transparent als TButton-Träger oder einfach direkt das Verhalten eines Button simulierend.

Im Prinzip bekomme ich dadurch einige Vorteile:
  • Sollte in allen Windows-versionen gleich funktionieren, u.U. auch Windows 8
  • Kann entweder auch direkt einen TButton verwenden oder beim selber zeichnen die Ereignisse der TForm verwenden
  • Mit 3 Zeilen Code im MainForm ist der Button einsatzbereit
  • Insgesammt war wesentlich weniger Code nötig
  • Beim Resize flackert nichts

aber auch kleine Nachteile:
  • Bei einigen Testrechnern schwimmt der Button beim Move minimal (laufe ja letztlich hinterher), fällt zum Glück aber nur auf, wenn man darauf achtet
  • MainFormOnTaskbar = False;
  • und irgend etwas hab' ich sicher übersehen ;-)

Windows Vista/7 konnte ich nur kurz testen, ich hoffe es funktioniert trotz einer Arbeiten nach dem Test weiterhin. 64bit hab' ich überhaupt keine Version zum testen parat.

In der Anlage eine kleine Testanwendung, der Source folgt... muss ich aber noch aufräumen

Luckie 28. Okt 2011 20:14

AW: TAppButton - Application Button like Firefox (experimentell)
 
Das kennst du: http://msdn.microsoft.com/en-us/library/bb688195

Satty67 28. Okt 2011 20:33

AW: TAppButton - Application Button like Firefox (experimentell)
 
Die Vorstellung von MSDN kannte ich noch nicht, ist aber im Prinzip die Richtung in der das Beispiel von Chris Rolliston ging.

Es sieht bei MSDN zwar wesentlich übersichtlicher aus (was aber eher am .NETC++-Code liegt), DWM ist aber erst ab Vista+ verfügbar. Für XP muss man sich weiterhin eine eigene Lösung suchen.

Wenn man ab VISTA entwickelt, würde ich mich da reinarbeiten. Das muss ja gleich bei der Entwicklung/Planung des Mainform als Code einfließen.

implementation 28. Okt 2011 21:07

AW: TAppButton - Application Button like Firefox (experimentell)
 
Auch wenn das jetzt vllt nicht unbedingt für dich relevant ist:
Die neue Testanwendung läuft auch unter Wine (getestet unter Fedora/Gnome3) wie sie soll!

Scheint also sowieso die universellere Lösung zu sein.
Denn selbst wenn du den Button jetzt auch per DWM unter Win7 zum Laufen bekommst
- wie wird das dann, wenn du irgendwann mal auf MacOSX oder Linux portieren willst?

Satty67 28. Okt 2011 22:18

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von implementation (Beitrag 1133280)
läuft auch unter Wine (getestet unter Fedora/Gnome3) wie sie soll!

Ist beruhigend... liegt aber eben auch daran, das ich kaum Abhängigkeiten habe... die vorhanden via alter Technik (GetSystemMetrics) hole.

In der Anlage der aktuelle Source-Code. Sind noch ein paar Kleinigkeiten zu implementieren und auf Sonderfälle zu untersuchen. Aber zum Spielen reichts ;-)

Ist im Moment auf jeden Fall noch als "Experiment" zu sehen.

wicht 28. Okt 2011 22:42

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gefällt mir auch gut!

Zwei kleine Probleme:
  • Wenn man unter Windows 7 das Fenster maximiert, passt der Button nicht mehr so ganz. Eventuelles neben-Quest: Ich benutze nicht das Standard-Windows-7-Theme. Interessant dabei: Der Firefox sieht am Anfang auch so "verkehrt" aus wie deine Komponente, wenn ich ihn maximiere. Ein paar Millisekunden später passt der Button sich beim Firefox allerdings an und liegt passig. Bild vom maximierten Fenster ist im Anhang.
  • Wenn man zweimal hintereinander auf den Button klickt, wird das Popup immer wieder angezeigt, wobei man eigentlich davon ausgehen sollte, dass es beim zweiten Klick wieder einklappt. Vielleicht ist das aber auch nur ein Fehler in der Demo-Anwendung, nicht in der Komponente an sich.

Satty67 28. Okt 2011 23:00

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das erste Problem sollte sich schnell lösen lassen, da muss man wohl nur Top < 0 abfangen, wenn fMainForm maximized. (Muss zum Win7 testen über die Strasse laufen, das mache ich morgen)

Das zweite Problem liegt noch am falschen Verhalten der Komponente, wenn DropDownMenu angegeben wird. Werde das morgen auch noch fixen.

Der neue Source ist ja in Post #10, falls jemand selber probieren möchte.

***

Update:

Die beiden Fehlverhalten beseitigt.

Wobei ich nicht unter Win7 testen konnte, aber dank dem Bild von Wicht denke ich das es beim abgeschnittenen Button daran lag, was oben beschrieben ist.

Das Buttonverhalten bei aufgeklapptem Menu, ist durch eine Prüfung, ob im "Hot"-Modus, auf das erwartete Verhalten angepasst.

Satty67 19. Nov 2011 18:41

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 2)
So, letztlich habe ich mich für eine Variante entschieden. Zwischendurch war ja sogar die Idee, mittels transparenter VCL-Form den ganzen Titlebar Bereich für Controls verfügbar zu machen. Das hab' ich verworfen.

Jetzt verwende ich eine eigene NonVCL Fensterklasse, die quasi wie ein Button-Control reagiert. (War sowieso mal fällig, das ich über den Bereich auch mal was lerne). Wie mir hier gezeigt wurde, ist es nicht so trivial, 32/64bit in einen Topf zu werfen. Hab' mich letztlich für eine Kombination aus Procedure und globaler Var entschieden (innerhalb der Unit im implemention Teil). Für mich geht das in Ordnung ;)

Gegenüber der ersten Vorstellungen ein paar kleine Änderungen (hoffentlich Verbesserungen):
  • MainForm-Caption wird nicht mehr verändert. Es wird nur noch die WindowProc gehooked. Wenn MainForm/Button-Caption gleich sind, reicht das zum abdecken. Womit auch MainFormOnTaskbar unangetastet bleiben kann (wegen Win7, blinken wichtig).
  • Die runden Ecken des Vista-Button werden per Region gelöst, nicht mehr durch eine transparente Farbe. So gibt es auch keine Farbkollisionen.
  • Wenn das MainForm nicht den Fokus hat, wechselt der Button seine Farbe in clInactiveCaption (abschaltbar)
  • Wenn nicht im ClassicStyle, wird jetzt etwas weniger neugezeichnet. Bei ClassicStyle hab' ich es leider nicht hinbekommen, da ist das Filter zu viel Arbeit.

Mir bekannte Nachteile:
  • Je nach System schwimmt der Button bei schnellem Fenster bewegen. Tritt aber nicht immer auf und ich finde, man sieht es nur, wenn man darauf achtet.
  • Im ClassicStyle wird bei verkürzen des Caption-Textes der NC_Bereich verzögert aktualisiert. Für einen festen Caption-Text ist das zum Glück egal.
  • Unter Win7 ist bei BorderStyle Single/Dialog der Button etwas vom Rand abgesetzt. Beseitige ich noch, mangels Win7 System nur etwas mühsam.
  • ...und natürlich alles was ich übersehen habe ;)

In der Anlage der aktuelle Source und wieder eine kleine App zum schnellen Testen.

Ich bin soweit zufrieden, zumal ich das nur für eine kleine mediale Anwendung im privaten Umfeld brauche.

Stevie 19. Nov 2011 19:08

AW: TAppButton - Application Button like Firefox (experimentell)
 
Unter Aero tritt beim starten und beim Wiederhestellen von Minimiert der Effekt auf, dass der button schon da ist, bevor der Fenster da ist (durch die Einblendeanimation des Fensters)

Satty67 19. Nov 2011 19:20

AW: TAppButton - Application Button like Firefox (experimentell)
 
Danke, sowas fällt natürlich nicht auf, wenn man nicht permanent Vista/Win7 zum Testen parat hat.

Ich bekomme in den nächsten Wochen endlich ein dauerhaftes Win7 System. Wird wohl erst mal am besten sein, während der Animation den Button einfach auszublenden... sofern man dafür Ereignisse gereicht bekommt.

Gustav.R 19. Nov 2011 19:49

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Satty67,

sehr schöne Spielerei, dankeschön :thumb:

Habe das da mit D7 personal kompiliert:

Delphi-Quellcode:
unit UnitTest1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  uAppButton,
  Dialogs, Menus;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Beenden1: TMenuItem;
    Kopieren1: TMenuItem;
    PopupMenu1: TPopupMenu;
    Beenden2: TMenuItem;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  AppButton: TAppButton;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AppButton := TAppButton.Create(self);
  AppButton.DropDownMenu := PopupMenu1;
  AppButton.Caption := Form1.Caption;
end;

end.
Läuft problemlos unter Windows2000, XP, Vista und 8DP.

Da unter 8DP die Form.Captions wieder zentriert werden (siehe Screenshot), muss man sich da halt was einfallen lassen, falls man mal mit findwindow herumbasteln will und die Form.Caption auf '' setzt :evil:

LG
Gustav

Gustav.R 19. Nov 2011 20:00

AW: TAppButton - Application Button like Firefox (experimentell)
 
Zitat:

Zitat von Satty67 (Beitrag 1137024)
Danke, sowas fällt natürlich nicht auf, wenn man nicht permanent Vista/Win7 zum Testen parat hat.

Ich bekomme in den nächsten Wochen endlich ein dauerhaftes Win7 System. Wird wohl erst mal am besten sein, während der Animation den Button einfach auszublenden... sofern man dafür Ereignisse gereicht bekommt.

Irgendwo im Internet gibt es sicher noch die Win7-Enterprise-Demo, die 90 Tage läuft. Die hatte ich mir schon ein paarmal parallel zu Vista (auf einer anderen Partition) installiert und nach Ablauf der 90 Tage jeweils wieder mit einer Ubuntu-Live-CD gelöscht. Für's Testen der eigenen Software reicht das.

LG
Gustav

Satty67 19. Nov 2011 20:16

AW: TAppButton - Application Button like Firefox (experimentell)
 
Schön, das auch mal unter 8 zu sehen bzw. das es da prinzipiell auch läuft. Notfalls lässt man da der Form den Text und nimmt für den Button nur den Text "Menu". Da bleibt aber noch Zeit ;)

Was das Testen angeht... wo Du was von Demo schreibst fallen mir die VPC2007 Test-Images für den Explorer wieder ein. Sind wohl mehrere Gigabyte... muss mal schauen, ob ich mir den Download antue. Evtl. klappt es ja mit dem Win7 Notebook auch etwas schneller.

Gustav.R 19. Nov 2011 20:27

AW: TAppButton - Application Button like Firefox (experimentell)
 
Oh, Mist, habe mich zu früh gefreut :oops:

Starte ich meine Demo (unter Vista) über eine Desktop-Verknüpfung mit der Eigenschaft "maximiert", so erscheint der AppButton an "poDesigned" anstatt links oben in der Ecke. Erst beim Drüberfahren mit der Maus huscht er nach links oben. Liegt vermutlich an meiner Primitiv-Demo!

LG
Gustav

Edit hat ein vergessenes "e" dazugekauft. Die Win7-Enterprise-Demo (32bit) war (schlag' mich nicht) ein DVD-ISO-Download.

Satty67 19. Nov 2011 20:54

AW: TAppButton - Application Button like Firefox (experimentell)
 
Schlecht... und gut. Scheint gleichzeit mit einer Lösung für von Stevie beschriebens Problem zu lösen zu sein.

Quasi wenn das Fenster fertig mit "Show" Aktionen ist nochmal ein Invalidate, davor notfalls verstecken. Ich melde mich, wenn das gelöst ist (nicht mehr heute ;) ).

PS: Wird in all den Situation der Button erst Orange wenn das MainForm in Endposition ist? Unter XP sieht es so aus, als ob ich da über den Focus ein geeignetes Ereignis habe.

Gustav.R 19. Nov 2011 23:20

AW: TAppButton - Application Button like Firefox (experimentell)
 
Beim Umstieg von XP auf Vista oder 7 wirst Du ein "beeindruckendes Erlebnis" haben oder eine "beeindruckende Erfahrung" machen!

Quasi nix funktioniert mehr wie zuvor.

Viel Spaß ohne Backup!

Sei gewarnt...

GG

xaromz 20. Nov 2011 10:29

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

habe gerade die Demo ausprobiert. Wenn ich das Fenster nehme und wild über den Bildschirm ziehe rutscht irgendwann der Button hinters Fenster (siehe Screenshot). Nach einem Focuswechsel stimmt dann wieder alles.

Gruß
xaromz

cookie22 20. Nov 2011 12:54

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab noch etwas gefunden. Wenn man das Fenster mit dem Maximierungs-Button maximiert und dann mit einem doppelklick auf die Titelbar minimiert, wird der button nicht neu gezeichnt. Siehe Screen. Um das zu vermeiden, sollte der Button in Aero nicht größer als die Boder-Icons sein. Halt so wie im Firefox selbst. Und toll wäre es, wenn der Button unter Vista/7 noch den weißen Rand und den DropDown Arrow hätte. Dann sähe er Perfekt aus.

Hast du schon eine Idee, wenn er dann fertig ist, unter welcher Lizenz du ihn laufen lässt? MPL wäre toll. Bitte nicht GPL. :)

Satty67 20. Nov 2011 17:45

AW: TAppButton - Application Button like Firefox (experimentell)
 
Also viele der beschriebenen Probleme hab' ich mir mit der "Optimierung" am Ende eingebrockt . Also Enfernen der behandelten Ereignisse, die scheinbar nicht gebraucht werden. Dadurch wird jetzt an vielen Stellen nicht neu gezeichnet, wo es sollte.

Die Probleme bei Minimize/Restore und Maximize konnte ich schon durch wieder reinnehmen einiger Ereignisse abfangen. Muss vorsichtig wieder etws Intelligenz dahinter bauen, um nicht zu viel sinnlos neu zu zeichnen. Andere Probleme sind aber etwas schwieriger zu lösen, vor allem Vista/Win7 wird mühsam, weil ich unter XP entwickele. Aber ich klemme mich dahinter... kann im Moment aber nur am Wochenende voll ran.

Optische Anpassungen und Umstellung auf eine Paletten-Komponente kommen zum Schluss.

Zitat:

Zitat von cookie22 (Beitrag 1137087)
Hast du schon eine Idee, wenn er dann fertig ist, unter welcher Lizenz du ihn laufen lässt? MPL wäre toll. Bitte nicht GPL. :)

Das ganze verstehe ich als experimentelles Hobbyprojekt ;)

Keine Lizenz, keine Beschränkungen, frei verfügbar. Jeder kann den Code verwenden wie er möchte.

Gustav.R 22. Nov 2011 20:36

AW: TAppButton - Application Button like Firefox (experimentell)
 
Da der AppButton von Dir/satty67 wirklich eine schöne Spielerei ist, habe ich für das in #16 gepostete "Projekt" ein wenig in der unit uAppButton 2.5 herumgepfuscht. Die Änderungen sind mit //Gustav kenntlich gemacht :shock:


Delphi-Quellcode:
procedure TAppButton.MainFormWndProc(var Message: TMessage);
begin
  if Assigned(fMainFormWndProc) then
    fMainFormWndProc(Message);
  case Message.Msg of
    WM_MOVE, WM_MOVING:
    begin
      MoveButtonWindow(True);
    end;
    WM_STYLECHANGED, WM_SETTINGCHANGE:
    begin
      Color := Color;
      Invalidate;
    end;
    WM_SYSCOMMAND:
    begin
      if (Message.WParam = SC_MAXIMIZE) or (Message.WParam = SC_RESTORE) then
        begin //Gustav
        Visible := true; //Gustav
        Invalidate;
        end; //Gustav
      if (Message.WParam = SC_MINIMIZE) then Visible := false; //Gustac
    end;
    WM_NCACTIVATE {, WM_ACTIVATE, WM_SHOWWINDOW, WM_EXITSIZEMOVE}:
    begin
      Visible := true; //Gustav
      Invalidate;
    end;
    WM_NCCALCSIZE:
    begin
      if fOSStyle = absClassic then
        Invalidate;
    end;
  end;
end;

Unter Vista klappt es damit ganz gut, beim Klicken auf "Minimieren" bleibt der deaktivierte AppButten nicht mehr auf dem Desktop hängen :thumb: Klar, weil ich ihn verschwinden lasse :oops:

Irgendwelche sonstigen Verhaltenweisen/Eigenschaften des AppButtons habe ich NICHT durchgetestet!

Ergänzung/Nachtrag zu meinem Post #19:

Zitat: "Starte ich meine Demo (unter Vista) über eine Desktop-Verknüpfung mit der Eigenschaft "maximiert", so erscheint der AppButton an "poDesigned" anstatt links oben in der Ecke. Erst beim Drüberfahren mit der Maus huscht er nach links oben."

Nachtrag dazu: Der AppButton ist links bereits an der richtigen Position, nur eben nicht oben in der Ecke! Sondern bei "poDesigned". Vermutlich klappt da was bei TAppButton.MoveButtonWindow bei der Positionsberechnung nicht so ganz?

Null Ahnung meinerseits! Aber vielleicht hilft's ja Dir/satty67 für das nächste Update?

LG
Gustav

Satty67 22. Nov 2011 21:19

AW: TAppButton - Application Button like Firefox (experimentell)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Du hast in die gleiche Richtung gedacht wie ich ;) Etwas hab' ich unter der Woche auch schon geschafft, kann aber erst am WE richtig ran und testen. Kleiner SuperGau: dachte ich kann mit Delphi7PE am Win7 Rechner direkt testen, aber ApplicationOnTaskbar schein das Cerhalten (weitergereichte Ereignisse) auch wieder zu ändern.

Das Problem mit dem an falscher Position hängenden Button (bei diversen Maximize Aktionen), liegt nicht an einer falschen Berechnung, sondern an einer fehlenden Aktualisierung. Da hab' ich zuvor entfernte Messages wieder zum Behandeln reingenommen. Überhaupt hab' ich mal neu organisiert.

Zum hängenden Button bei animiertem Mini/Maximize hatte ich die gleiche Idee wie Du. Einfach das Teil vorher ausblenden (allerdings nicht Visible direkt ändern, falls der unsichbar war, sollte er es bleiben). Hab' es in einem ersten Ansatz etwas anders gelöst. Konnte aber noch nicht wirklich testen... unter XP läuft es leider fast immer sehr gut...

Delphi-Quellcode:
procedure TAppButton.MainFormWndProc(var Message: TMessage);
var
  R : TRect;
begin
  case Message.Msg of
    WM_SYSCOMMAND:
    begin
      if (Message.WParam = SC_MINIMIZE) then
        ShowWindow(fHandle, SW_HIDE);
    end;
  end;

  if Assigned(fMainFormWndProc) then
    fMainFormWndProc(Message);

  case Message.Msg of
    WM_MOVE, WM_MOVING, WM_SIZe, WM_SIZING, WM_EXITSIZEMOVE, WM_NCPAINT:
    begin
      MoveButtonWindow(True);
    end;
    WM_STYLECHANGED, WM_SETTINGCHANGE:
    begin
      Color := Color;
      Invalidate;
    end;
    WM_ACTIVATE:
    begin
      Invalidate;
    end;
    WM_NCCALCSIZE:
    begin
      R := ButtonRect;
      if (not fOptimizeUpdates)
      or (fLastPainted.X <> R.Left) or (fLastPainted.Y <> R.Top) then
        Invalidate;
    end;
    WM_SYSCOMMAND:
    begin
      if fVisible
      and ((Message.WParam = SC_RESTORE) or (Message.WParam = SC_MAXIMIZE)) then
      begin
        ShowWindow(fHandle, SW_SHOW);
        fMainForm.SetFocus;
      end;
    end;
  end;
end;
Ich bin jedenfalls sicher, dass die Probleme zu lösen sind, muss nur noch etwas suchen ;)

Ich poste gleich die ganze Unit nochmal, und die Exe zum Testen...

€: Heute morgen kurz am Win7 PC getestet, funktioniert nicht richtig!
Ich bekomme zum WE ein Win7 Notebook. Dann kann ich das direkt testen. Immer ändern und später probieren hat kein Wert, so komme ich nicht weiter. Verschiebe das Problem jetzt erstmal, bis ich mit D2007 direkt auf Win7 entwickeln kann.

Keks 5. Jan 2012 02:00

AW: TAppButton - Application Button like Firefox (experimentell)
 
Hast Du eigentlich noch weiter daran gearbeitet? Wäre schön, eine voll funktionsfähige Komponente zu haben. :)

Satty67 5. Jan 2012 08:37

AW: TAppButton - Application Button like Firefox (experimentell)
 
Hallo,

ja, hab' zwar leider nur ein Netbook mit Win 7 Starter zum Testen bekommen (hat ja auch kein Aero), aber konnte zumindest in der Testumgebung einiges ausmerzen.

Aktuell hab' ich noch ein Problem drin, dass ich noch nicht innerhalb der Komponente, sondern nur im Hauptfenster lösen kann. Wird im MainForm.Create das Fenster maximiert (z.B. Laden der Einstellungen), wird das durch TAppButton auf halben Weg unterbrochen mit entsprechend falschem Verhalten des Fensters. Ich erzeuge den AppButton einfach nach solchen Aktionen, statt davor.

Hatte dann Urlaub und das Projekt ganz vergessen ;-)

Ich poste heute Abend, wenn ich Zuhause bin, den aktuellen Source-Code. Evtl. fällt mir bis dahin ein, wie ich das oben beschiebene Problem noch ausmerzen kann.

Keks 5. Jan 2012 12:34

AW: TAppButton - Application Button like Firefox (experimentell)
 
Zitat:

Zitat von Satty67 (Beitrag 1144394)
ja, hab' zwar leider nur ein Netbook mit Win 7 Starter zum Testen bekommen (hat ja auch kein Aero)

WIe wärs damit? :)

Satty67 5. Jan 2012 12:46

AW: TAppButton - Application Button like Firefox (experimentell)
 
Hmm, Starter steht zwar nicht dabei, aber probiere ich heute Abend mal aus. Könnte auch 75 € für's AnyTimeUpgrade investieren, aber nur wegen Aero und ein paar Einstellungen ist mir das zu viel.

Also die meisten Probleme machten Aero bzw. GlassFrame. Kann das ja leider nur umständlich testen, aber vieleicht habe ich ja alles erwischt, was falsch lief.

Ich melde mich heute Abend wieder, wenn ich Zuhause und satt bin ;)

Codehunter 3. Jul 2013 08:26

AW: TAppButton - Application Button like Firefox (experimentell)
 
Zitat:

Zitat von Satty67 (Beitrag 1144433)
Ich melde mich heute Abend wieder, wenn ich Zuhause und satt bin ;)

Hi,

wollte mal nachfragen, was an jenem Winterabend so herausgekommen ist ;-) Bin nämlich im Moment auch dran, neuere Anwendungen auf Aero Glass umzustellen und so ein Application Button wäre da schick. Ich habe die hier bisher verlinkten Testanwendungen mal durchgespielt unter W7x64 und konnte bis auf den "Fade-In-Effekt" beim Öffnen des Fensters keine Probleme mehr feststellen.

Grüße
Cody

ralfschwalbe 3. Jul 2013 09:09

AW: TAppButton - Application Button like Firefox (experimentell)
 
Hab grad gesehen, dass der Button unter Windows 8 gar nicht mehr gezeichnet wird...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz