![]() |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Einen Punkt meiner Wunsch und Problemliste kann ich nun doch schon FAST streichen. Und zwar gehts um den Border. Ich vermute mal, dass der Stift beim zeichnen zentriert aufgesetzt wird und habe aus dem Grund mal die X-Position um die Hälfte der BoderWidth verschoben und siehe da, wenn ich eine BorderWidth > 1 habe funzt das schon mal. Der Code, der nicht wirklich schön ist, sieht so aus - zumindest bei mir. Werde die Division vorher einmal erledigen und nicht jedesmal neu rechnen lassen und einen Klausel für die BorderWidth 1 einführen.
Delphi-Quellcode:
//zeichnen des rahmens
Canvas.MoveTo(0 + (BorderWidth div 2),0); //links oben Canvas.LineTo(myRect.Left + (BorderWidth div 2),myRect.Bottom); Canvas.MoveTo(0,0 + (BorderWidth div 2)); Canvas.LineTo(myRect.Right,myRect.Top + (BorderWidth div 2)); Canvas.MoveTo(self.Width-(BorderWidth div 2),0); //rechts unten Canvas.LineTo(myRect.Right-(BorderWidth div 2),myRect.Bottom); Canvas.MoveTo(0,self.Height-(BorderWidth div 2)); //links unten Canvas.LineTo(myRect.Right,myRect.Bottom-(BorderWidth div 2)); |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Hi torud,
ich bin schon ziemlich k.o. für heute, aber zum Thema Textausrichtung kann ich noch mal was beisteuern. Du übergibst in DrawText als letzten Parameter die Ausrichtungsflags. Somit definierst du dir eine Variable vom Typ UINT und setzt diese mit MyTextForm := ersteFlag or zweitesFlag or ... Das mit übergeben, und das wars schon. Gruß oki |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Nachtrag,
Rahmen mit Canvas.FrameRect Gruß |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Moin Moin Oki,
ich bin auch schon ziemlich groggy, aber hier mal mein aktueller Status. Das mit dem Rahmen passt nun, auch wenn ich NOCH nicht mit FrameRect gemacht habe. Kommt noch. Dann habe ich mich mal an die Ausrichtung gewagt und siehe da, es gibt einen teilweisen Erfolg. Folgenden Code habe ich benutzt, um die Ausrichtung zur vollziehen. Dabei hatte ich dass Problem, dass ich eigentlich die bekannte Eigenschaft Layout benutzen wollte, wie sie beim TLabel zum Einsatz kommt, aber dazu war leider nichts in der Hilfe zu finden.
Delphi-Quellcode:
Folgenden Code benutze ich für das Layout:
var
... myFirstAlignment,mySecondAlignment : Cardinal; //init myFirstAlignment := DT_CENTER; mySecondAlignment:= DT_VCENTER; case TextAlign of taCenter : myFirstAlignment := DT_CENTER; taLeftJustify : myFirstAlignment := DT_LEFT; taRightJustify : myFirstAlignment := DT_RIGHT; end; //bis hierher ist alles super case Layout of tlTop : mySecondAlignment := DT_TOP; tlCenter : mySecondAlignment := DT_VCENTER; tlBottom : mySecondAlignment := DT_BOTTOM; end; //das hier funzt noch nicht DrawText(self.Canvas.Handle, PChar(FText), -1, TextRect, myFirstAlignment or mySecondAlignment or DT_WORDBREAK);
Delphi-Quellcode:
Findest Du da einen Fehler? Am liebsten wäre mir ja, wenn ich die originale Eigenschaft LAYOUT nutzen könnte, wie beim Alignment...
type
TLayout = (tlTop, tlCenter, tlBottom); private FLayout:TLayout; procedure SetTextLayout(Layout : TLayout); published property Layout : TLayout read FLayout write SetTextLayout; procedure TmyPanel.SetTextLayout(Layout:TLayout); begin If Layout = FLayout then Exit; // wenn gleicher Status nichts tun FLayout := Layout; // Status abspeichern Invalidate; // Control neu zeichnen end; |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Hi,
warum so kompliziert.
Delphi-Quellcode:
und alles ist super.
case TextAlign of
taCenter : myAlignment := DT_CENTER; taLeftJustify : myAlignment := DT_LEFT; taRightJustify : myAlignment := DT_RIGHT; end; case Layout of tlTop : myAlignment := myAlignment or DT_TOP; tlCenter : myAlignment := myAlignment or DT_VCENTER; tlBottom : myAlignment := myAlignment or DT_BOTTOM; end; IF FWordWrap then myAlignment := MyAlignment or DT_WORDBREAK; DrawText(self.Canvas.Handle, PChar(FText), -1, TextRect, myAlignment); Um mal kurz auf das Thema runde Ecken zu kommen. Wie es in echt gemacht wird ist mir auch nicht bekannt. Aber such mal CombineRGN und CreateRGN hier im Forum. Da wirst du was zu Transparenz und "Durchklickbar" finden. Ich denke zu zeichnes dann deinen Rahmen mit runden Ecken und kombinierst zwei Ranges miteinander. Einer ist begrenzt durch BoundsRect, der Zweite durch deinen Rahmen. Somit wird der äußere Bereich transparent und Durchklickbar. guckst du hier ![]() Gruß oki |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Danke für den Tipp und die Einkürzung des Codes. Die Zusammenstellung ist schon ok, aber leider habe ich immer noch das Problem, dass LAYOUT nicht funktioniert. Das war auch der Grund warum ich den Aufbau in meinem vorherigen Post darlegte.
Irgendwie scheint das was nicht zu stimmen... Den Rest mit dem Border und Deinen weiteren Hinweisen zu den abgerundeten Ecken werde ich mir nach dem jetzt stattfindenden Wocheneinkauf anschauen. EDIT Habe mir FrameRect angesehen und werde es wohl meiden, da es fix einen Border von einem Pixel zeichnet. So wie ich es habe bin ich flexibel und könnte es sogar dahingehend aufboren, dass man jeder Seite seine eigene Rahmenbreite zuweisen kann. |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Moin torud,
Zitat:
Bei deinem Code mit dem Layout kann ich keinen Fehler finden. Da mußt du an anderer Stelle was falsch machen. Geh mal mit dem Debugger durch den Bereich mit TextDraw und dem Setzen der attribute und sag mal was passiert. Gruß oki |
Re: Benötige Hilfe beim Entwickeln einer Komponente
Sorry für die Dumme Frage, aber wenn ich in der Komponente F9 drücke und mir vorher einen Stopppunkt setze, funzt das leider nicht, dass ich mir das mit dem Debugger anschauen kann, da ihm wohl noch eine Host-Anwendung fehlt => ist doch meine erste Komponente. Ich weiss es nicht besser. Was muss ich tun?
|
Re: Benötige Hilfe beim Entwickeln einer Komponente
Hi,
kein Problem. Eine Compo alleine kannst du nicht debuggen. Ist ja imho nur ne Unit (+Pakage). Du mußt dir eine kleine Testanwendung schreiben. einfach neue Anwendung und deine neue Compo auf der Form platzieren. Dann öffnest du deine Unit (der Compo), compilierst das Projekt und setzt den Brakepoint. Dann anwendung starten. Da dein Brakepoint in der Paint-methode steckt, wird er natürlich sofort angesprungen. Also am Besten Anwendung starten und dann Brakepoint setzen. immer wenn du deine Form in den Vordergrund bringst, schlägt der Debugger zu. Du kannst ja auch Variablen auswerten usw. Wenn du weitere Fragen hast, keine Scham; her damit. Gruß oki |
Re: Benötige Hilfe beim Entwickeln einer Komponente
So ich habe es so gemacht, wie Du mir gesagt hast.
Folgendes habe ich dabei getan. Während der Debugger zugeschlagen hat, bin ich mit der Maus über die für mich eigentlich wichtigen Variablen gegangen und habe dabei folgende Daten zusammen getragen: TextAlign = taCenter daraus folgt, dass myAlignment := 1 zugewiesen wird. Layout = tlBottom daraus folgt, dass zu myAlignment DT_BOTTOM "addiert" wird, was am Ende eine 9 ergibt In DrawText wird dann auch die 9 zugewiesen. Ich hoffe, dass ich alles richtig beschrieben habe. Also ist Layout auf jeden Fall schon mal belegt und es hat auch den richtigen Inhalt, den ich im OI zugewiesen habe. Wenn ich testweise man Layout auf tlCenter stellt ist myAlignment = 5. Das scheint stimmig zu sein... Keine Ahnung was da nun falsch ist...!? Ok, und da ich ja einen Text auf das Control schreibe, möchte ich natürlich auch den Font zuweisen können. Ich habe mir aus einem Tutorial alles zusammengesucht, was ich dafür brauche, aber die Zuweisung scheint nicht zu funzen. Kann man denn dem Canvas einen Font zuweisen? Folgenden Code benutze ich für den Font bisher:
Delphi-Quellcode:
Habe ich da was wichtiges vergessen?
private
... FFont: TFont; published property Font: TFont read FFont write FFont; constructor TmyPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FFont:=TFont.Create; ... destructor TmyPanel.Destroy; begin FFont.Free; ... procedure TmyPanel.Paint; begin ... Canvas.Font := Font; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 Uhr. |
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