#1 13. Januar 2009 Zuletzt von einem Moderator bearbeitet: 14. April 2017 [Delphi] 7 Segmentanzeige Hi. Super einfache Aufgabe (für die liebe Schule): Programmiere eine siebensegmentanzeige-komponente in Delphi (5). Problem: Ich hab gar keine Ahnung, würds aber trotzdem gern machen Daher bräuchte ich bitte schritt-für-schritt support Also ich hab jetzt in Delphin Neu-> Neue Komponente ausgewählt, Vorfahrtyp TShape (würd die Anzeige gerne mit Shapes realisieren) und soweit so gut. {bild-down: https://www.xup.in/tn/2009_01/26865996.jpeg} Jetzt hab ich den Spaß vor mir (siehe screen), und frag mich, wo ich den üblichen clickbunti-scheiß machen kann. (das ist mit delphi doch sonst so leicht) Also wo kann ich die 7 Segmentanzeige jetzt "formen" ? Sollte jemand ne "open source" delphi 7-segment-anzeige finden (oder haben) würde ich mich sehr über diese freuen, um sie zu verstehen und dann auch selber machen zu können. bis jetzt hab ich nur erfolglos gegooglet.. grüße My-Doom PS: Jemand nen besseren Prefix-vorschlag? :x + Multi-Zitat Zitieren
#2 13. Januar 2009 AW: [Delphi] 7 Segmentanzeige Hi, warum unbedingt ein TShape Objekt? Wäre eventuel vielleicht ein TGraphicControl Objekt besser..... Um eine benutzerdefinierte Zeichnung zu realiesern muss die Funktion Paint überschreiben und in dieser deine Objekt und somit dein Segement gezeichnet werden. In der überschriebenen Paint-Funktion kannst du mit der Untereigenschaft- objekt Canvas (siehe ausfürliche Beschreibung Delphi Hilfe unter TCanvas) die Verschiedenen Mahlfunktionen aufrufen. Beispiel: Code: [B]uses [/B][...] Controls [...]; [...] [B]type[/B] TMyObject = [B]class[/B](TGraphicControl) [B]private[/B] [COLOR="Blue"]// Variable in der der Wert gespeichert ist der Angezeigt werden soll[/COLOR] FSegement: Integer; [COLOR="Blue"]// Funktion die bei Veränderung den neuen Wert übernimmt und die // Anzeige Akutalliesiert[/COLOR] [B]procedure [/B]SetSegement(Value: Integer); [B]protected[/B] [B]public[/B] [COLOR="Blue"] // Paintfunktion wird überschireben // Wird automatisch aufgerufen sobald das Stauerelement vom Betriebssystem // den Befehl bekommt[/COLOR] [B]procedure [/B]Paint; [B]override[/B]; [B]published[/B] [COLOR="Blue"] // Eigenschaft über die man den Aktuallen Anzeigewert auslessen und // setzen kenn // Beim lesen wird die Variable FSegement ausgelesen // Beim schreiben wird die Funktion SetSegement aufgerufen und der // neue Wert übergeben, die Funktione kann dann entscheiden ob der // übergebene Wert angenommen wird oder nicht[/COLOR] [B]property [/B]Segement: Integer [B]read [/B]FSegement [B]write [/B]SetSegement; [B]end[/B]; [...] [B]implementation[/B] [...] [B]procedure [/B]TMyObject.SetSegement(Value: Integer); [B]begin[/B] [COLOR="Blue"] // Wurde Wert geändert? // wenn nicht wird das Akutallieseren der Anzeige // nicht durchgeführt um Ressourcen zu sparen[/COLOR] [B]if [/B]Value = FSegement [B]then [/B]Exit; FSegement := Value; [COLOR="Blue"]// Wert übernehmen[/COLOR] Paint(); [COLOR="Blue"] // Steuerelement neuzeichnen[/COLOR] [B]end[/B]; [B]procedure [/B]TMyObject.Paint; [B]var [/B]S: [B]String[/B]; [B]begin[/B] S := IntToStr(FSegement); [COLOR="Blue"]// Wert in String umwandeln[/COLOR] [B]with [/B]Canvas [B]do [/B][COLOR="Blue"]// Mit der Eigenschaft Canvas weiter arbeiten[/COLOR] [B]begin[/B] [COLOR="Blue"] // Text bzw. den Wert auf das Steuerelement zentiert Zeichnen // ClientRect von TCanvas enthält die Position- und Größedaten // der Zeichenfläche an[/COLOR] Brush.Style := bsSolid; TextRect(ClientRect, (Width - TextWidth(S)) div 2, (Height - TextHeight(S)) div 2, S); [COLOR="Blue"] // Rahmen zeichnen[/COLOR] Brush.Style := bsClear; Rectangle(ClientRect); [B]end[/B]; [B]end[/B]; [...] Je nach dem, wie deine Anzeige aussehen sollst kannst du die Funktionen bzw. die Eigenschaften von TCanvas benutzen: MovoTo, LineTo, Pixels[x,y], FillRect, Rectangel, Circle, Brush, Pen .... Mfg Rushh0ur + Multi-Zitat Zitieren