Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Runde, ovale, diagonale, geschwungene oder sonstwie Buttons (https://www.delphipraxis.net/78959-runde-ovale-diagonale-geschwungene-oder-sonstwie-buttons.html)

Sunlight7 13. Okt 2006 20:01


Runde, ovale, diagonale, geschwungene oder sonstwie Buttons
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo DPler!

Eigentlich wollt ich nur Wissen, ob meine Idee funktionieren würde, und heraus kam diese Komponente...

Man kann in den Ressourcen die Bitmaps hinterlegen, welche dann als Buttons dargestellt werden.
Auf Deutsch gesagt, man zeichnet die Buttons, und Kompo setzt es um.
Also das ist jetzt schwierig zu beschreiben, am besten, Ihr guckt Euch den Screenshot mal an.

Geschrieben ursprünglich mit Delphi 2, die Komponente zum Download ist jetzt aber für Delphi 5.0+

Neu in V1.5:
  • Speed Optimierung, besonders für große Bitmaps
  • Eigenschaften:
  • EnabledStr & PushedStr: Zur komfortablen Nutzung im OI und zur einfachen Speicherung und Wiederherstellung von Konstellationen für Enabled bzw. Pushed.
  • Bugs ausgebügelt.

Neu in V1.4:
  • Eigenschaften: PushedButtons & Pushed

V1.3:
  • Ressourcen Bitmaps entfernt
  • Bitmaps zum OI hinzugefügt, ich hoffe ihr seid jetzt glücklicher :wink:

V1.2:
  • Eigenschaft Enabled für die Buttons
  • Bugfixes im Design-Modus
  • Bugfixes mit gedrückter Maustaste
  • Timer entfernt (D5+)

V1.1b:
  • "Schnelles Maus darüber ziehen Problem behoben"
  • TransparentColor:
    • Ein beliebiger Farbwert, oder:
    • clNone: Keine Transparenz
    • clBackground: Die Farbe von Pixels[0, 0] wird verwendet.

Hint:
F: Ist doch eine Standard Eigenschaft?
A: Jein, ich habe aus der Eigenschaft eine StringList gemacht.
Die 0. Zeile bleibt leer, die restlichen Zeilen stehen für den
jeweiligen Button.

ResStandard, .., ResTouchZones
Hier können die Ressourcennamen eingegeben werden, die dann
geladen werden.

Ich weiß, das ist noch nicht das Gewünschte...

Viel Spaß damit!

PS: Wäre schön, wenn Ihr einen Screenshot posten würdet, was ihr damit gemacht habt.

Zitat:

Zitat von Delphi 5.0 Compiler
interner Fehler C1569

Das hat mich was genervt... :evil: :evil: :evil:

Edit: Demo Exe erneuert.

newuser01 13. Okt 2006 20:22

Re: Runde, eckige, geschwungene oder sonstwie Buttons
 
Fehler: RoundButton.res nicht gefunden :gruebel:

Sunlight7 13. Okt 2006 20:37

Re: Runde, eckige, geschwungene oder sonstwie Buttons
 
Ja die muß man erst machen...

Aber ich könnte mal meine als Beispiel hinzufügen?

newuser01 13. Okt 2006 20:40

Re: Runde, eckige, geschwungene oder sonstwie Buttons
 
kannst du machen

Sunlight7 13. Okt 2006 20:45

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Hmm, wo hab ich die bloß wieder hingespeichert? :gruebel:

Ach da is sie ja, hier bitte, oben zu finden. :zwinker:

dino 13. Okt 2006 20:59

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
wenn man nen button nach dem klick loslässt, ist die Maus doch immernoch drauf...
trotzdem wird der button icht mehr so markiert

Namenloser 13. Okt 2006 21:03

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von Sunlight7
PPS: Kann mal wer probieren, ob diese Funktion in neueren Delphi Versionen auch nen internen Fehler verursacht?!
Delphi-Quellcode:
function GetPixel(Bitmap:TBitmap; const x, y:Integer):LongInt;
   var sl:PByteArray;
begin
   sl:=Bitmap.ScanLine[y];
   Result:=RGB(sl[(x * 3)+2],
               sl[(x * 3)+1],
               sl[(x * 3)+0]);
end;
Zitat:

Zitat von Delphi 5.0 Compiler
interner Fehler C1569

Das hat mich was genervt... :evil: :evil: :evil:

das ist jetzt mehr oder weniger ins Blaue getippt, aber könnte das vielleicht eher etwas mit dem Bitmap-Format zu tun haben?
Außerdem bin ich mir nicht sicher, ob Scanline in diesem Falle tatsächlich schneller ist als Canvas.Pixels :?

newuser01 13. Okt 2006 21:08

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Funktioniert soweit ganz gut. Der Hit wäre noch wenn man die Komponente einfach auf der Form zieht die eigenen Grafiken einbinden könnte also für ButtonActive,ButtonInctive,ButtonPush und so weiter und die ASnzahl der Schaltflächen bestimmen könnte :mrgreen:

Ich weiß ich bin unverschämt :mrgreen:

Sunlight7 13. Okt 2006 21:18

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von NamenLozer
das ist jetzt mehr oder weniger ins Blaue getippt, aber könnte das vielleicht eher etwas mit dem Bitmap-Format zu tun haben?
Außerdem bin ich mir nicht sicher, ob Scanline in diesem Falle tatsächlich schneller ist als Canvas.Pixels

Das Bitmap Format würde erst bei der Laufzeit nen Fehler machen, und es ist nicht das Problem, es sind 24 Bit.
Canvas.Pixels (Gähn) ist vieeeel langsamer.

Zitat:

Zitat von dino
wenn man nen button nach dem klick loslässt, ist die Maus doch immernoch drauf...
trotzdem wird der button icht mehr so markiert

Etwas genauer bitte, ich hab da kein Problem :gruebel:

Zitat:

Zitat von newuser01
Funktioniert soweit ganz gut. Der Hit wäre noch wenn man die Komponente einfach auf der Form zieht die eigenen Grafiken einbinden könnte also für ButtonActive,ButtonInctive,ButtonPush und so weiter und die ASnzahl der Schaltflächen bestimmen könnte.

Ja könnte man, aber dazu mußt Du erst noch überzeugungs Arbeit Leisten. :mrgreen:

Zacherl 13. Okt 2006 21:24

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von dino
wenn man nen button nach dem klick loslässt, ist die Maus doch immernoch drauf...
trotzdem wird der button icht mehr so markiert

Etwas genauer bitte, ich hab da kein Problem :gruebel:
Er meint, dass der Button grün wird, wenn man die Maus drüberhält, beim Klicken grau wird und nach dem Loslassen grau bleibt, obwohl er wieder grün werden sollte, da die Maus ja immer noch drüber ist.

Florian

newuser01 13. Okt 2006 21:27

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

a könnte man, aber dazu mußt Du erst noch überzeugungs Arbeit Leisten. Mr. Green

Die Delphigemeinde dem "Sunlight7" Hypnotisiert und eintrichtert "du bist ein RoundButton-Komponentenschreiber" "du bist wirklich ein RoundButton-Komponentenschreiber" wenn du aufwachst schreibst du nur an dieser Komponente bis zur Vollendung :mrgreen:

Sunlight7 13. Okt 2006 21:32

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
*Von der Leitung runter Steige*

Ich habs nacher noch kapiert.
Problem behoben und hochgeladen (.pas).

Edit: @newuser01 Wenn ich mal Zeit habe mach ich das noch, mal sehen, derweil mußt Du noch mit den Ressourcen auskommen.

Hawkeye219 13. Okt 2006 21:43

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von Sunlight7
Kann mal wer probieren, ob diese Funktion in neueren Delphi Versionen auch nen internen Fehler verursacht?!
Das hat mich was genervt..

Der Code scheint etwas zu komplex für den Compiler zu sein. Versuche einmal den Umweg über eine Hilfsvariable:

Delphi-Quellcode:
function GetPixel (Bitmap: TBitmap; const x, y: Integer): LongInt;
var
  sl : PByteArray;
  idx : Integer;
begin
  sl := Bitmap.ScanLine[y];
  idx := x * 3;
  Result := RGB(sl[idx + 2], sl[idx + 1], sl[idx]);
end;
Eine Alternative wäre der TypeCast mit TRGBTriple aus der Unit Windows.

Gruß Hawkeye

Sunlight7 13. Okt 2006 21:51

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Das Problem hab ich schön gelöst, aber Danke:

Delphi-Quellcode:
function GetPixel(Bitmap:TBitmap; const x, y:Integer):LongInt;
   var sl:PByteArray;
begin
   sl:=Bitmap.ScanLine[y];
   Result:=(sl[(x * 3)+2])+(sl[(x * 3)+1] shl 8)+(sl[(x * 3)+0] shl 16);
end;
Zu komplex für den Compiler?
Der Delphi 2.0 Compiler kann das aber :gruebel:
Der Fehler wurde erst später eingebaut, und ich wollte eigentlich wissen, ob der Fehler bei den neueren Versionen immer noch da ist.

Zacherl 13. Okt 2006 21:52

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Unter D2005 PE lässt sich der Code einwandfrei compilieren ...

Sunlight7 13. Okt 2006 21:54

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Danke, also doch kein Fall für die Delphi-Bug Reports.

newuser01 13. Okt 2006 21:55

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Ich habe bei den VCL Komponenten die "JvgButton1" Kompo gefunden diese Komponente hat alles was man dazu braucht eine Schaltfläche so zu erstellen wie sie "Sunlight7" und "Dino" Programmiert haben. In dieser Komponente läd man einfach die entsprechenden Bilder wie sie oben schon gezeigt wurden rein also z.b für ButtonActive,ButtonInactive,ButtonMask,ButtonPushe d und hat dann diese Schaltfläache. Wenn man nun ein gesamte runde Schaltfläche haben will die aufgeteilt ist dann legt man einfach mehrere "JvgButtons" mit den entsprechenden Bildern aneinander das funktioniert bestens und sieht genau so aus wie die Komponente von "Sunlight7"

Sunlight7 13. Okt 2006 22:00

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Und das sagst Du mir erst jetzt??? :roll:

Hawkeye219 13. Okt 2006 22:06

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von Sunlight7
Der Fehler wurde erst später eingebaut, und ich wollte eigentlich wissen, ob der Fehler bei den neueren Versionen immer noch da ist.

Sorry, ich hätte es erwähnen sollen: ein Test mit Delphi 6 professional brachte die Meldung "Interner Fehler C1850". Nach der Aufteilung des Codes war die Fehlermeldung weg. Schaltet man in den Compileroptionen die Optimierung aus, läßt sich auch dein Originalcode übersetzen. Ich vermute daher, daß dem Compiler/Optimizer die Register ausgehen. Delphi 2006 übersetzt deinen Code mit und ohne Optimierung ohne Probleme.

Gruß Hawkeye

dino 13. Okt 2006 22:10

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
nach dem loslassen bleibt der btton nicht grau, sondern wird blau... sollte aber rot sein, weil die maus noch drauf ist

genauer ehts nicht, ausser mit nem video

3_of_8 13. Okt 2006 22:10

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Mir ist auch grad sowas ähnliches passiert.

Ich hatte ein Array mit Records und ein Array mit Pointern auf diese Records und musste jetzt beide kopieren, allerdings sollten die Pointer des zweiten Arrays auf die Records des kopierten ersten zeigen. Da mir da keine andere Lösung eingefallen ist, habe ich das mit ein paar Pointeroperationen hingebogen. Ich bekam zwar keinen internen Fehler, aber ein paar Invalid Pointer Ops und hab dann die Optimierung ausgeschaltet, jetzt gehts.

newuser01 13. Okt 2006 22:13

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry "Sunlight7" aber hab ich auch erst vorhin gefunden die Komponente zur Entschädigung ein Bildchen :mrgreen:

Sunlight7 13. Okt 2006 22:14

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
@Hawkeye219 Danke nochmals, das wollt' ich wissen.
Haben die Borlandler Glück gehabt, das Sie den Fehler schon ausgebügelt haben.

@dino, sollte schon funktionieren, kannste ausprobieren (nur die .pas hab ich neu hochgeladen). :zwinker:

Edit: @newuser01 Da ich ohnehin nur eigens gemachte Kompo's verwende ist das nicht so schlimm, jetzt
muß ich mir nur noch ein Programm ausdenken, wo ich die Kompo dann einsetzte.

Aber mir gefällt meine Kompo besser (prahl), weil man nur eine braucht und mit einer case Anweisung die geklickten Buttons leicht aufsplitten kann.

newuser01 13. Okt 2006 22:25

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Aber mir gefällt meine Kompo besser (prahl), weil man nur eine braucht und mit einer case Anweisung die geklickten Buttons leicht aufsplitten kann.
Lass es mich wissen wenn die Kompo fertig ist werde gerne darauf zurückgreifen :-D

Sunlight7 13. Okt 2006 22:34

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Zitat:

Zitat von newuser01
Lass es mich wissen wenn die Kompo fertig ist werde gerne darauf zurückgreifen

Wann ist eine Kompo wirklich fertig? :gruebel:
Ich finde bei meinen Kompos immer wieder was zum erweitern :mrgreen:
Aber ich werde Dich über Neuheiten Informieren :zwinker:

newuser01 13. Okt 2006 22:59

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Liste der Anhänge anzeigen (Anzahl: 1)
Sunlight7 wie machst du die Grafiken :gruebel: ich bekomme das in Photoshop einfach nicht hin sieht nich ma 2D mäßig aus :mrgreen:
Ich sag ja bin unfähig zu Zeichnen :( Ich wollte die Schaltflächen so wie deine machen nur mit 5 Schaltflächen also 4 stück so und und eine runde in der Mitte (Play oben, Stop in der Mitte , Pause unten, Next rechts und Back links. Vielleicht kannste mir darin ja noch helfen. Die gesamte Schaltfläche darf nich größer sein wie der Platz der dafür vorgesehen ist (siehe Bild) und Farbe der Schaltflächen sollte das dunkle blau sein (siehe Bild) mir würden die reinen Schaltflächen genügen Beschriftung oder dergleichen bekomm ich denke mal noch selber hin :mrgreen:

Sunlight7 13. Okt 2006 23:13

Re: Runde, eckige, diagonale, geschwungene oder sonstwie But
 
Schick mir das Player.jpg und das was Du gemacht hast mal via PN.
Aber BITTE im .png Format, ich hab vom Provider so nen dämlichen Speed Manager vorgeschalten, der auch wenn er deaktivieert ist bmp, jpg und gif so komprimiert, das man nix mehr erkennt. :evil:
Oder wenn Du kein png kannst, was ich nicht glaube, dann mach ein zip draus.

Edit: Hab ich vorhin übersehen:
Zitat:

Zitat von newuser01
Sorry "Sunlight7" aber hab ich auch erst vorhin gefunden die Komponente zur Entschädigung ein Bildchen

[Ironisch]
Und dann auch noch in meinem Thread Werbung für die Konkurenz machen... :shock:
Also Leute gibt's :roll:
Ts ts ts :mrgreen: :mrgreen: :mrgreen:
[/Ironisch]

Sunlight7 14. Okt 2006 16:08

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Kurz zur Info: Paar kleinigkeiten verbessert: Details oben :zwinker:

newuser01 14. Okt 2006 18:02

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Zitat:

Also mir langts jetzt, ich führe doch einen Befehl aus: Application.Terminate; Ätsch!

:mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:

Sunlight7 14. Okt 2006 18:28

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Ja, da hatte ich gerade meine "lustigen 5 Minuten", und da hab ich nen kleinen Spaß ins Demo eingebaut. :lol:
Aber das bin halt typisch ich, für solche Späße bin ich schon bekannt. :???:

dino 15. Okt 2006 15:23

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
hab noch ein gemeinsames(oder emeinsamen??? ka) Bug gefunden:

dein und mein Programm haben beide das Problem. dass wenn man ganz schnell über die Buttons geht, dass dann unter umständen ein Button aktiviert bleibt, weil die Maus sich, da sie so schnell bewegt wurde ja offiziel nicht wegbewet sondern einfach verschwunden ist

die Maus ist mit einem Sprung vom Button dahingesprungen, wo sie nicht mehr kontrolliert wird...

wie kann man das ändern?


ich will z.B. nen Timer bestimmen, der jedesmal überprüft, wo sich die maus befindet, aber im gegensatz zu onmousemove wird nem timer nicht die x,y koordinaten der maus übergeben...

Sunlight7 15. Okt 2006 19:08

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Der Fehler kommt bei TGraphicControl, so wie Du in Beschrieben hast öfters vor.

Wenn ich ehrlich bin, hatte ich noch keine Zeit, Deinen Quellcode anzusehen :(

Das mit dem Timer mache ich normalerweise bei meinen Kompos, aber weil ich diese als Open-Source veröffentlicht habe, hab ich das gelassen, weol ich das für eine schlechte programmierweise halte.

Was besserers ist mir noch nicht eingefallen, man könnte ggf. MouseCapture verwenden, aber ob das ideal ist und bei ohne Handle Fenster funkt hab ich noch nicht probiert.

PS: Du muß bei dem Timer die MousePos abfragen und auf das gewünschte Control umrechnen.

dino 15. Okt 2006 22:27

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
ich habe immernoch nicht verstanden, darum frag ich nochmal verienfacht:

wie kann ich z.B. ner Timerprozedur die Mauskoordinaten übergeben?

Sunlight7 15. Okt 2006 22:42

Timer in Kompo
 
Zitat:

Zitat von Dino
wie kann ich z.B. ner Timerprozedur die Mauskoordinaten übergeben?

Das läuft anders herum, Du hohlst Dir die Mauskoordinaten in der Timerprocedure.

Hast Du ne jetzt ne Kompo, nutzt Du meine oder hast das nur so auf einem Formaular?

Ich werde das mal in die Kompo einbauen, dann kannst Du Dir das ansehen.
Das sind dann 2 Fliegen mit einer Klappe (Nicht das Du ne Fliege wärst).

dino 15. Okt 2006 23:03

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
wofür bruache ich deine Kompo?
nenne mich alltmodisch, aber ich hätte wenn dann gerne ein Projekt, wo das drin vorkommt...

wenn der timer die Koordiaten erhalten will, muss sie jemand eben, nur solche sachen wie onmousemove oder irgendwa onmouse klappt nicht, da die maus sich nicht auf der Form befindet und somit auch keine koordinatenüberreichende anweisungen macht

Sunlight7 15. Okt 2006 23:48

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Update hochgeladen... siehe oben.

Zitat:

Zitat von dino
wofür bruache ich deine Kompo?

Weiß ich nicht, war ja nur ne Frage...
Zitat:

Zitat von dino
nenne mich alltmodisch, aber ich hätte wenn dann gerne ein Projekt, wo das drin vorkommt...

Spricht ja nix gegen.
Kompos haben halt den Vorteil, das man Sie nur einmal Programmieren muß, und sie dann leichter in mehreren Projekten verwenden kann.

Wegen den Timer:
1. Gucke Dir die neue Kompo an, oder
2. Gib in Deinem Projekt einen "Reset", sobald das Formular einen MouseMove feststellt.

2teres funkt nicht immer, wenn die Form sehr klein ist.

dino 16. Okt 2006 06:06

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
2. funktioniert auch nicht, wenn die buttons am rand sind, weil man dann ja auch schafft davonzuspringen...
also allgemein nochmal die frage: schhafft mans die koordinaten zu kriegen, auch wennn die maus nicht auf der Form ist?(oder zumindest zu erkennen, dass die Maus nicht auf der Form ist)

bisher erkenne ich den Standpunkt der Maus nur, wenn ch eine taste drücke, oder die maus bewee sonst nicht...

Sunlight7 16. Okt 2006 06:21

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Hast Du Dir die neue Kompo nicht angesehen?

Genauso, wie es da drin steht kannst Du es auch auf einer Form machen.

dino 16. Okt 2006 07:22

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
ne noch nicht, aber wenn du schon sagst, dass es auf einer kleinen Form immernoch vorkommt, weiss ich ja, dass du bei form1 onmousemove den reset durchführst, was aber nichts bringt, solange die maus ausserhalb der Form rumläuft...

also entweder, wir holen uns die mausosition irgendwie anders, oder wir schummeln, indem wir die form screengröße geben, es aber so aussehen lassen, als sei sie kleiner, indem wir das Fensterdesign normal darstellen und darumherrum den hintergrund zeigen...
kann man in dem Fall bei Klick in den äusseren bereich dem hintergrund übergeben?(dass man per rechtsklick auf die form das sieht, wenn man auf den desktop klickt

Sunlight7 16. Okt 2006 08:08

Re: Runde, ovale, diagonale, geschwungene oder sonstwie Butt
 
Sieh Dir zuerst die Komponente an ...

Da ist die 1. Option mit Timer drin
Die 2. würde ohne gehen, aber wie gesagt, funkt net immer.

Edit: Falls Du die Exe probiert hast, die hab ich nicht neu hoch geladen, die hat den Fehler noch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
Seite 1 von 2  1 2      

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