| Autor |
Beitrag |
Beibo
      
Beiträge: 24
|
Verfasst: Do 12.07.07 22:37
Hallihallo alle zusammen,
mein erster beitrag hier!
folgendes problem stellt sich mir. (ich arbeite mit delphi 4 bzw. 6 ... schulisch bedingt)
dass meine Roulette simulation (bin wirklich anfänger) auch grafisch ein wenig hermacht will ich die 'label-quadrate', die ich als klickflächen benutze (um auf bestimmte felder über einem bild eines roulette spielplans klicken zu können). sie sind transparent und nun will ich, nachdem eine zufallszahl erzeugt wurde, das feld mit der bestimmten zahl irgendwie hervorheben oder markieren.
unter den eigenschaften von den labeln habe ich keine gefunden, die etwas über den "rand", also das quadrat drumherum aussagt, wie zum beispiel den Rand farbig nachzieht, wie ein bilderrahmen oder was auch immer.
frage 1: diese "border" kann man nicht anzeigen lassen, oder? vll in einer neueren version?!
also bin ich weiter gegangen und wollte nun mit einem bildbearbeitungsprogramm ein Rechteck erstellen, dass in der mitte sozusagen hohl/transparent ist, sodass man die zahl die auf dem bild zu sehen ist, immernoch sehen kann.
sowas kann man aber, soweit ich das mitbekommen habe, nur als "gif" speichern. Die image komponente von delphi kann "gifs" allerdings nicht öffnen!
frage 2:habe ich eine möglichkeit die transparenz anders abzuspeichern, bzw. frage 3: gifs in delphi zu laden? frage 4: und wenn ja, wie stellt delphi diese transparenz dar?
sorry, wenn ich ein wenig kaotisch schreibe, ich bin eben noch ned soooo alt
glg und schon mal recht herzlichen dank für eure hoffentliche hilfe!
gruß Benedikt
Zuletzt bearbeitet von Beibo am Mo 16.07.07 15:22, insgesamt 1-mal bearbeitet
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Do 12.07.07 22:54
Hallo Benedikt
Sorry, auch wenn Du nicht so alt bist, solltest Du versuchen, Dein Problem etwas genauer zu beschreiben.
Ev. würde es helfen, wenn Du ein Bild Deines bisherigen Aufbaus zeigen würdest (Nachvollziehbarkeit für uns).
Ev. wäre es auch nicht schlecht, wenn Du uns Dein Problem in kleinen Häppchen servieren würdest.
_________________ Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 12.07.07 23:00
Canvas, Rectangle - damit kannst Du Rahmen um deine Labels zeichnen.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Do 12.07.07 23:07
Blackheart666 hat folgendes geschrieben: | | Canvas, Rectangle - damit kannst Du Rahmen um deine Labels zeichnen. |
Zu 1:
Die Ränder kann man beeinflussen (siehe oben) +
- BorderStyle
- Bevel...
- Ev. reicht Dir auch nur eine Farbänderung des Hintergrunds: Color
Zu 2ff:
Ev. mit anderen Form's arbeiten, dabei kannst Du dann Alphablending einsetzen. (machbar aber  )
Zeig Doch mal ein Bild Deines bisherigen Ansatzes, vielleicht kann Dir jemand einen besseren Ansatz aufzeigen!?
_________________ Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro
|
|
firefuzy
      
Beiträge: 69
Win 98 SE, WinXP Prof, Vista HPrem.
Delphi 7
|
Verfasst: Fr 13.07.07 06:48
Hi
Wie oben schon gesagt, kann man einfach die Zeichenfunktion von Delphi benutzen (Canvas).
So wie ich das verstanden habe, willst du nur einen Rahmen um den Button? Dann hilft dir vllt das hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin Form1.Canvas.Pen.Width := 4; Form1.Canvas.Pen.Color := clRed; Form1.Canvas.Rectangle( Button1.Left, Button1.Top, Button1.Left + Button1.Width, Button1.Top + Button1.Height); end; |
Ich hoffe dass die Funktion des Codes selbsterklärend ist. Ansonsten frag halt nochmal
Greetz firefuzy
PS: Das ganze kann man natürlich nicht nur auf Buttons anwenden sondern auf jedes (sichtbare) Objekt.
Edit: Oh ich seh grad dass dus auf Labels einsetzen wolltest.  Musst hlat alle "Button1"´s durch "Label1"´s ersetzen
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mo 16.07.07 15:22
hey super, danke erstmal für die hilfe, mein i-net is völlig abgekratzt, nachdem sie eine andere verbindung von der telekom freigeschalten haben...jetzt bin ich wieder am start, werde gleich mal testen, wie das mit diesem befehl geht, doch eine frage zu dieser textzeile: Delphi-Quelltext 1: 2:
| Form1.Canvas.Rectangle( Button1.Left, Button1.Top, Button1.Left + Button1.Width, Button1.Top + Button1.Height); | was gibt das in klammern alles an, werd da ned so ganz schlau draus! danke und grüße Moderiert von Tino: Delphi-Tags eingefügt.
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mo 16.07.07 15:33
also, es geht zwar einen rahmen zeichnen zu lassen, allerdings lässt sich die linien dicke überhaupt nicht beeinflussen und auch nicht die farbe....strange oder?! liegt es an meinem delphi 6?
gruß Bene
der text inhalt wird dann auch immer verdeckt, aber das bekomm ich vll selber wieder hin..oder?  ! 
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mi 18.07.07 11:02
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 18.07.07 12:45
Label Umrandungen und Hintergrund lassen sich so färben :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure Tfrm.lblMouseEnter(Sender: TObject); begin if (Sender is TLabel) then begin if ((Sender as TLabel).Parent is TPanel) then begin Canvas.Pen.Color := clNavy; Canvas.Pen.Width := PinselBreite; Canvas.Rectangle ((Sender as TLabel).Parent.Left-1, (Sender as TLabel).Parent.Top-1, (Sender as TLabel).Parent.Left + (Sender as TLabel).Parent.Width+2, (Sender as TLabel).Parent.Top + (Sender as TLabel).Parent.Height+2); ((Sender as TLabel).Parent as TPanel).Color := clSkyBlue; (Sender as TLabel).Parent.SetFocus; end; end; end; |
Aber Achtung !! Für Anfänger womöglich schwer zu durchschauen, was genau gamacht wird. Soll das 1:1 abgekupfert werden, dann unbedingt zuerst ein Panel auf die Form legen und dann da die Labels draufpappen. Sonst wirds so nicht gehen (wegen Parent).
_________________ Gruß
Hansa
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mi 18.07.07 13:38
ok perfekt danke, darf ich nun dazu fragen, oder hast du/ihr keine lust einem anfänger das, was für euch wahrscheinlich wie das 1 x 1 ist, zu erläutern?
gruß Benedikt
hätte sonst auch icq: 232276680 worüber man dann eventuell leichter kommunizieren könnte, wenns "draufankommt" 
|
|
Biergeneral
      
Beiträge: 35
WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
|
Verfasst: Mi 18.07.07 14:18
Was passiert ist eigentlich nicht so kompliziert wie es aussieht.
Ich weiß nicht inwieweit du dich mit Komponenenten/Controlstrukturen auskennst, also erklär ich das grob
Wenn du ein sichtbares Objekt auf das Formular ziehst, werden automatisch zwei Werte gesetzt.
Zum einen der Besitzer(Owner) der Komponente und zum anderen der Vater(Parent).
Beide haben z.B. Einfluss darauf, wann das Objekt wieder freigegeben wird.
Der Parent des Objects ist immer der übergeordnete Container. Sprich wenn du ein Label in ein Panel ziehst, ist der Parent des Labels das Panel. ( Label.Parent := Panel )
Und das kann man für diverse Sachen ausnutzen, wie auch hier:
Als erstes wird also geprüft, ob das Objekt was das MouseEnter Ereignis losgeschickt hat auch wirklich ein Label ist. ( Zeile 3)
( Die as und is Operatoren kennst du? )
Danach wird dann noch überprüft, ob der Vater des Labels auch wirklich eine Panel ist. ( Zeile 4)
Wenn das der fall ist kann das eigentliche Zeichnen losgehen.
Der Rahmen wird auf Formular gezeichnet.. Sprich die Farbe und Stift/Rahmenbreite muss bei dem Canvas des Formulars gesetzt werden. ( Zeile 5,6)
Anschließend wird ein Rechteck um das Panel gezeichnet.
Canvas.Rectangle(LinkerRand, ObererRand, RechterRand, UntererRand)
Die Randposition ergibt sich aus der Position und Breite des Panels( Zeile 7,8,9,10)
Danach wird noch die Farbe des Panels auf Hellblau gesetzt. ( Zeile 11 )
Als letztes wird der Fokus gesetzt ( Obwohl ich nicht weiß, warum das Einfluss haben soll  )
Gruß
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mi 18.07.07 14:47
ok super, aber warum muss man erst diese zwei bedingungen abcheggen. warum sollte es denn nicht "wirklich ein label sein"...?
und warum immer das hier "(Sender as TLabel).Parent"
"(Sender as TLabel).Parent.Left-1,
(Sender as TLabel).Parent.Top-1,
(Sender as TLabel).Parent.Left + (Sender as TLabel).Parent.Width+2,
(Sender as TLabel).Parent.Top + (Sender as TLabel).Parent.Height+2);"
das will mir au no ned so in den kopf, sorry!  zweimal left und zweimal top?
für was dann noch die width und die height, bzw. was sagen die "-1" aus?
gruß und bitte verständnis für mein noobiverhalten! 
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 18.07.07 18:58
Wie wichtig ist denn das ? Falls wichtig, dann guck ich genau. 
_________________ Gruß
Hansa
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mi 18.07.07 19:36
naja, ich wills verstehen und dann auch beeinflussen können, bzw. auf andere sachen beziehen!
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 18.07.07 19:51
Das ist gar nicht so einfach. Ich habe es realisiert mit einem Panel pro Label. Pinselbreite ist eine Variable, die als protected deklariert ist, zum vererben. Für ein Schulprojekt gibt das zu wenig her. Da kommt noch einiges mehr ins Spiel.
_________________ Gruß
Hansa
|
|
Beibo 
      
Beiträge: 24
|
Verfasst: Mi 18.07.07 21:23
ok, gibt es denn für delphi etwas vergleichbares wie für html: selfhtml.org , was eine top seite ist, die wirklich umfassend informiert und vieles wissen vereint und dem einfachen user nahebringt. is sowas eig. wien lexicon mit allen möglichen befehlen etc.
gibtssowas?
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Mi 18.07.07 22:02
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Agawain
      
Beiträge: 460
win xp
D5, MySQL, devxpress
|
Verfasst: Mi 18.07.07 22:45
Hi
Dann wage ich mal einen Versuch, das zu erklären.
Wobei Biergenerals Ansatz eigentlich schon ganz gut war.
Also das Ereignis, was hier die Zeichnungsfunktion auslöst, gehört dem Form, wird also immer dann ausgelöst, wenn ein MouseEnter ausgeführt wird.
Wobei ich das Ereignis MouseEnter nicht kenn^^, bzw. devexpress hat es zwar aber nicht D5, darum grübel ich auch gerade etwas, wie das Label als Sender auftreten kann...kann Deine Verwirrung also durchaus nachvollziehen.
Ist eigentlich auch egal, denn Du willst ja die Zeichenfunktion in Deine Routine einbauen, die die Zufallszahl generiert, wirst es so also nicht gebrauchen können.
Da das Ereignis für das ganze Form gilt, würde der nachfolgende Code für jede Komponente durchlaufen, also auch für einen Button z.B.
Darum als das erste if. Das 2. if dient dazu, abzufragen, ob sich das Label auch in einem Panel befindet, um sicherzustellen, daß es sich wirklich um ein SpielfeldLabel handelt und nicht irgendein Bechriftungslabel außerhalb des Spielfelds.
So und das mit dem Parent rührt daher, daß das die Koordinaten hergibt, die es zu zeichnen gilt und nicht das Label.
Also pro Label muß es ein Panel geben, das nur geringfügig größer ist, als das Label.
Darin ist das Label eingebettet.
Wenn das Label dann angesprochen wird, referenzierst du mit .Parent den Container, den Du jetzt zeichnen willst.
Und Achtung...die Zeichenfläche ist aber das Form!!
Darum brauchen wir jetzt die Koordinaten in Beziehung zum Fenster.
Die siehst Du ja auch im Objektinspector.
Die Rechteckfunktion (Rectangle) zeichnet dann unter Angabe von 4 Koordinaten ein Rechteck.
Daß man hier ein bissel abzieht oder dazugibt liegt an einer gewissen Pixel-Ungenauigkeit und wie weit man in Delphi zeichnen will.
Spiel einfach mal ein bissel mit Canvas rum dann wirst Du sehr schnell sehen können, was passiert und das ist zum Verständnis sehr viel effizienter, als diese Trockenübung.
Ich bin mir gar nicht sicher, ob der Code so laufen kann...weiß es nicht genau...aber beinhaltet für Dich einen netten Lösungsansatz, der verständlich ist und einfach zu realisieren ud wahrscheinlich optisch auch ne gute Lösung.
Kardinalfrage....warum müssen die Labels transparent sein?
Wenn das nicht sein muß, kannst Du nämlich enfach pro Zahl ein Panel als Unterlage definieren. Das Panel muß um die gewünschte Rahmenbreite breiter und höher sein, als das Label.
Das Panel hat im Urzustand eine neutrale Farbe, von mir aus auch dieselbe Farbe wie das Label. Wenn Du die Eigenschaft Bevelouter auf bvNone stellst, dan sieht man noch nicht mal, daß ein Panel da ist.
Jedes Panel bekommt dann den Namen, der auch die Zahl, die das Label repräsentiert, also z.B pnl_37
Und wenn Du dann Deine Roulette-Zahl generiert hast, dann benutzt du findComponent...
Für findComponent bitte die Suchfunktion des Forums benutzen, da gibts Beispiele zu Hauf.
Und dann einfach Panel umfärben.
Da das Label nicht transparent ist, sieht man nur den überstehenden Teil vom Panel.
Gruß
Aga
Zuletzt bearbeitet von Agawain am Do 19.07.07 00:03, insgesamt 1-mal bearbeitet
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 18.07.07 23:39
So siehts aus. Der zuletzt Antwortgebende hat das schon ganz gut erklärt. Der Rest liegt bei Dir.
_________________ Gruß
Hansa
|
|
|