![]() |
Problem mit von CustomEdit abgeleiteten Eingabefeld
Liste der Anhänge anzeigen (Anzahl: 1)
Ich programmiere ja z.Z. eine GUI für M.U.H Messenger und hänge grad am Eingabefeld.
Das Problem ist, dass der Text jetzt so in die Ecke geklatscht ist (siehe Anhang). Den Text den man darunter erkennt zeichne ich mit DrawText. Aber irgendwie muss ich die Position, wo der Text des CustomEdits ist ändern |
Re: TMUH_Edit
Zitat:
|
Re: TMUH_Edit
*sich übertragungsgeschwindigkeit für bildupload länger als fünf minuten ausrechnet*
|
Re: TMUH_Edit
Zitat:
|
Re: TMUH_Edit
okay, okay. Hab's hinzugefügt :oops:
|
Re: TMUH_Edit
Warum zeichnest du den Text über ein wohl schon existierendes Eingabefeld?
|
Re: TMUH_Edit
des eingabefeld zeichne ich ja. Der Text der drüber ist, soll ja weg bzw. Position und Hintergrundfarbe geändert werden
|
Re: TMUH_Edit
Zitat:
es wäre trotzdem nett wenn Du deiner Frage einen aussagekräftigen Titel geben würdest. Mit TMUH_Edit kann sicher niemand etwas anfangen. Danke :-) |
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Warum leitest Du denn nicht von TEdit ab ? Es ist doch viel zu mühselig, fast alle schon fertigen Sachen vom TEdit selber zu machen. :shock: Wofür gibts denn override ?
|
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Könnte ich probieren. Hast du irgendein Codebeispiel?
Das hab ich bis jetzt:
Delphi-Quellcode:
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; MouseInControl: Boolean; procedure NewAdjustHeight; procedure CMFontChanged (var Message: TMessage); message CM_FONTCHANGED; procedure CMMouseEnter (var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave (var Message: TMessage); message CM_MOUSELEAVE; procedure WMSetFocus (var Message: TWMSetFocus); message WM_SETFOCUS; procedure WMKillFocus (var Message: TWMKillFocus); message WM_KILLFOCUS; procedure WMNCCalcSize (var Message: TWMNCCalcSize); message WM_NCCALCSIZE; procedure WMNCPaint (var Message: TMessage); message WM_NCPAINT; procedure SetBorderCol(Value:TColor); procedure SetBorderCol2(Value: TColor); procedure SetBckrnd(Value: TColor); procedure Paint(const Clip: HRGN); public constructor Create (AOwner: TComponent); override; procedure Loaded; 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 AutoSize; property BorderStyle; 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; ControlStyle := ControlStyle - [csFramed]; SetBounds(0, 0, 121, 19); end; procedure TMUH_Edit.Paint(const Clip: HRGN); var Points: array [0..8] of TPoint; aRect: TRect; R: TRect; begin GetWindowRect(Handle, R); InflateRect(R, 3, 3); FCanvas.Brush.Color := Bckrnd; FCanvas.Rectangle(Rect(1,1,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.Brush.Style := bsClear; FCanvas.TextOut(0,0,Text); end; procedure TMUH_Edit.NewAdjustHeight; var DC: HDC; SaveFont: HFONT; Metrics: TTextMetric; begin DC := GetDC(0); SaveFont := SelectObject(DC, Font.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC, SaveFont); ReleaseDC(0, DC); Height := Metrics.tmHeight + 6; end; procedure TMUH_Edit.CMFontChanged(var Message: TMessage); begin inherited; if not((csDesigning in ComponentState) and (csLoading in ComponentState)) then NewAdjustHeight; end; procedure TMUH_Edit.CMMouseEnter(var Message: TMessage); begin inherited; if (GetActiveWindow <> 0) then begin MouseInControl := True; Paint(0); end; end; procedure TMUH_edit.CMMouseLeave(var Message: TMessage); begin inherited; MouseInControl := False; Paint(0); end; procedure TMUH_Edit.WMSetFocus (var Message: TWMSetFocus); begin inherited; if not(csDesigning in ComponentState) then Paint(0); end; procedure TMUH_Edit.WMKillFocus (var Message: TWMKillFocus); begin inherited; if not(csDesigning in ComponentState) then Paint(0); end; procedure TMUH_Edit.WMNCCalcSize (var Message: TWMNCCalcSize); begin inherited; InflateRect(Message.CalcSize_Params^.rgrc[0],-3,-3); end; procedure TMUH_Edit.Loaded; begin inherited; if not(csDesigning in ComponentState) then NewAdjustHeight; end; procedure TMUH_Edit.WMNCPaint (var Message: TMessage); begin inherited; Paint(HRGN(Message.WParam)); end; procedure TMUH_Edit.SetBorderCol(Value: TCOlor); begin BorderCol := Value; Paint(0); end; procedure TMUH_Edit.SetBorderCol2(Value: TCOlor); begin BorderCol2 := Value; end; procedure TMUH_Edit.SetBckrnd(Value: TCOlor); begin Bckrnd := Value; end; end. |
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
ich glaube ich komme der Lösung näher. ich habe jetzt per:
Delphi-Quellcode:
das ganze in die Mitte zu kriegen.
procedure TMUH_Edit.WMNCCalcSize (var Message: TWMNCCalcSize);
begin inherited; InflateRect(Message.CalcSize_Params^.rgrc[0],-3,-3); end; Nachteil: Jetzt zeichnet er den Rahmen auch in die Mitte :( |
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Beispiel ? Ne, leider habe ich noch nicht versucht, Teile der VCL nachzubauen. Zuerst mußt du mal sagen, was dir an dem normalen TEdit nicht paßt. An dieser Stelle muß dann angesetzt werden. Also Methode überschreiben oder hinzufügen. Momentan bist du dabei nicht einem Rad ein anderes Profil zu geben, sondern es komplett neu zu erfinden. 8)
|
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Sehr schön. Wenn du schon in zwei Foren postest und hier nicht erwähnst, was wir bereits diskutiert haben, dann verlinke wemfalls die Beiträge. :evil:
![]() Insbesondere diesen Hinweis: ![]() ![]() |
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
|
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Delphi-Quellcode:
Minimier das Fenster mal und maximier es wieder, dann siehst du das Problem: Es wird nicht neu gezeichnet bei der Texteingabe. Und ich würde dir empfehlen den Text zum Schluss auszugeben und nicht wieder drüber zu pinseln.
procedure TMUH_Edit.Paint;
var Points : array[0..8] of TPoint; rec: TRect; 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); rec := FCanvas.ClipRect; DrawText(FCanvas.Handle, PChar(Text), length(Text), rec, DT_VCENTER or DT_SINGLELINE);
Delphi-Quellcode:
:wall:
FCanvas.FillRect(Rect(0,0,Width,Height))
|
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Ich habe das Gefühl meine Hilfe wird hier völlig ignoriert. Nachdem ich dir den Hinweis mit DrawText gegeben habe, muss sich sehen, dass du es in dem hier gepostetetn Quelltext immer noch nicht ausprobiert hattest, zu mindest war im Quelltext davon nichts zu erkennen. Desweiteren habe ich dir in meinem letzten Post gesagt, warum es nicht richtig klappt. Und habe dir gesagt, was für ein Problem du lösen musst.
So langsam verliere ich die Lust zu helfen. |
Re: Problem mit von CustomEdit abgeleiteten Eingabefeld
Stimmt nicht. ich hab bis jetzt immer ausprobiert was du geschrieben hast.
Ist auch komisch, ich hab das geändert und abgespeichert bevor ich das hochgeladen hab. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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