Autor |
Beitrag |
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 00:08
Also, ich schreibe grad wieder meine eigenen GUI Komponenten, und hänge grad
an einem Eingabefeld. Jetzt:
wie kann ich da am besten so ein Eingabefeld wie das bei Ubuntu machen?
Also so ein Viereck mit den abgerundeten Ecken? Da ich ja nicht per Canvas
zeichnen kann, muss ich irgendne Funktion zum Linienzeichnen oder so finden.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.09.05 00:42
Was meinst du, wie Windows das macht? Das zeichent in der WndProc eines Edits auch nur auf den Canvas des Parentfensters. Du musst das Edit also Subclassen und es selberzeichnen.
|
|
Sprint
Beiträge: 849
|
Verfasst: Di 27.09.05 01:00
_________________ Ciao, Sprint.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.09.05 01:24
Sprint hat folgendes geschrieben: | Einfach von TCustomEdit ableiten und deiner neuen Komponente ein TCanvas verpassen. |
Spielverderber. Blöde VCL.
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 15:00
gibt's da sowas ähnliches wie MoveTo und LineTo ???
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.09.05 15:01
Guck doch einfach mal in der Hilfe nach den Methoden zu TCanvas.
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 15:13
sorry, das hab ich übersehen.
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 15:38
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.09.05 16:54
Na dann guck in der Hilfe noch mal nach den Parametern.
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 16:56
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Di 27.09.05 23:06
also Zeichnen selber geht jetzt schon. Aber der Text klatscht jetzt oben in der Ecke, wie bringe ich den Schön in die Mitte?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.09.05 00:35
Wie gibst du ihn denn aus? Mit TextOut? Nimm die API Funktion DRAWTEXT, damit hast du mehr Formatierungsmöglichkeiten. Als HDC nimmst du das Handle von deinem Canvas.
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Mi 28.09.05 13:29
ich zeig mal den kompletten Quelltext:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164:
| unit MUH_Edit;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TMUH_Edit = class(TCustomEdit) private BorderCol: TColor; BorderCol2: TColor; Bckrnd: TColor; FCanvas: TCanvas; procedure SetBorderCol(Value:TColor); procedure SetBorderCol2(Value: TColor); procedure SetBckrnd(Value: TColor); procedure Paint; protected procedure WndProc(var Message: TMessage); override; public constructor Create (AOwner: TComponent); override; published property BackgroundColor: TColor read Bckrnd write SetBckrnd; property BorderColor: TColor read BorderCOl write SetBorderCol; property BorderColor_hell: TColor read BorderCol2 write SetBorderCol2;
property Align; property CharCase; property DragCursor; property DragMode; property Enabled; property Font; property HideSelection; property MaxLength; property OEMConvert; property ParentFont; property ParentShowHint; property PasswordChar; property PopupMenu; property ReadOnly; property ShowHint; property TabOrder; property TabStop; property Text; property Visible;
property OnChange; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnEnter; property OnExit; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; {$IFDEF D4CB4} property Anchors; property BiDiMode; property Constraints; property DragKind; property ParentBiDiMode; property OnEndDock; property OnStartDock; {$ENDIF} end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('MUH Messenger', [TMUH_EDIT]); end;
constructor TMUH_Edit.Create (AOwner: TComponent); begin inherited; ParentFont := True; BorderCol := $00849295; BorderCol2 := $00E7EBEF; Bckrnd := clWhite;
FCanvas := TControlCanvas.Create; TControlCanvas(FCanvas).Control := self;
AutoSize := False; Ctl3D := False; BorderStyle := bsNone; ControlStyle := ControlStyle - [csFramed]; SetBounds(0, 0, 121, 19); end;
procedure TMUH_Edit.Paint; var Points: array [0..8] of TPoint; begin FCanvas.Brush.Color := Bckrnd; FCanvas.Rectangle(Rect(0,0,Width,Height)); FCanvas.Brush.Color := BorderCol; FCanvas.FrameRect(Rect(0,0,Width,Height)); FCanvas.Pen.Color := BorderCol2; FCanvas.MoveTo(1,Height-2); FCanvas.LineTo(1,1); FCanvas.LineTo(Width-1,1); FCanvas.TextOut(4,Height div 2 - FCanvas.TextHeight(Text) div 2,Text);
end;
procedure TMUH_Edit.WndProc(var Message: TMessage); begin inherited WndProc(Message); if Message.Msg = WM_PAINT then Paint; end;
procedure TMUH_Edit.SetBorderCol(Value: TCOlor); begin BorderCol := Value; Paint; end;
procedure TMUH_Edit.SetBorderCol2(Value: TCOlor); begin BorderCol2 := Value; Paint; end;
procedure TMUH_Edit.SetBckrnd(Value: TCOlor); begin Bckrnd := Value; Paint; end;
end. |
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 28.09.05 13:33
Luckie hat folgendes geschrieben: | Wie gibst du ihn denn aus? Mit TextOut? Nimm die API Funktion DRAWTEXT, damit hast du mehr Formatierungsmöglichkeiten. Als HDC nimmst du das Handle von deinem Canvas. |
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Mi 28.09.05 14:47
ja schon. aber der Text steht ja auch da, wenn ich's da lass. Nur eben so oben hingeklatscht
|
|
LH_Freak
Beiträge: 385
Win XP
D7 PE, D2k5 Trial
|
Verfasst: Mi 28.09.05 17:45
Das liefert mir das selbe ergebnis:
sieht so aus (anhang)
Wie kann ich das Teil von der Selektion und so weiternach unten versetzen?
Einloggen, um Attachments anzusehen!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 30.09.05 01:09
Hast du auch die Flags DT_VCENTER und DT_SINGLELINE gesetzt? Stimmt das Rect?
|
|
hansa
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 30.09.05 02:17
Luckie, das da hat so keinen Zweck. Habe vorhin in der DP noch was dazu geschrieben. Der soll sich mal zuerst überlegen, wo eine zusammenhängende Antwort zustande kommt. Das Stückwerk ist allerdings offensichtlich bereits eröffnet.
_________________ Gruß
Hansa
|
|