Jeg bruger en der hedder "winxp.res" som simulere xp look kan ikke lige´huske hvor jeg fik den fra men jeg kan lægge den til download. Et andet problem der kommer med brug af winxp er at den tomme del af tabcontrol forbliver grå - her plejer jeg at lægge et panel over med farven som form.
Nu er hverken fanebladene eller fanerne farvede. Nu er de hvide, uanset formens farve. Meningen var, at jeg skulle kunne indstille på farven, eller at fanerne i det mindste havde samme farve som formen.
Jeg har nu prøvet at installere pages v.1.2. Der er tre pas-filer, og de første to kan jeg også godt installere, men når jeg når til pages.pas, går det galt. Der står, at filen 'DsgnIntf.dcu' ikke blev fundet.
Nå, men jeg vil kigge nærmere på sagerne senere i dag.
yep det er fordi du ikke har lavet en reference i tools\environment options gå til fanebladet library og skriv i library path stien ned til dit component hvor *.dcu filen ligger f.eks
du skal nok ændre i pas filen for det component - kig på nedenstående
RE: dsgnintf.dcu
Ok, I had the same problem my self before. If you have the source code for that component and you try to install it in Delphi 6 or 7, but it is made for Delphi 5 or lower, you have to replace "DsgnIntf" in the uses clause with "DesignIntf, DesignEditors".
meget mærkeligt. jeg havde ordnet det hele og afprøvede det så i et projekt. jeg trykkede F9, og projektet gik i gang. jeg lukkede og trykkede igen F9. Og så virker det ikke!! Den påstår, den ikke kan finde DesignIntf.dcu.
Nu nåede jeg jo så ikke at afprøve komponentet fuldt ud, men umiddelbart kunne det ikke farve fanerne, men kun fanebladene ligesom det almindelige komponent kan. Iøvrigt var det noget besværligt at tilføje en fane. Man skulle ikke gør det som i Delphis komponent, men derimod højreklikke på selve komponentet og så vælge et punkt, som hed noget på tysk.
Men tak for hjælpen. hvis du ikke har et løsningsforslag, så må vi bare glemme det. Jeg må indrømme, at jeg ikke havde forestillet mig, det ville blive så besværligt.
Sæt ownerDraw til true og link onDrawTab eventet til det her. Bemærk at jeg har nogle typer tabPosTop osv. som du nok ikke har. Sørg iøvrigt for at du sætter bold-style på fonten på pageControlen, så passer breden på caption til min stil på aktiv-fane-caption, ellers skulle det være let at tilpasse det hele!
procedure TfrmPositionDlg.pcPositionDetailsDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var pc: TcustomTabControl; s: string; r: Trect; lf: TLogFont; OldFont: hFont; NewFont: hFont; begin pc:=control as TcustomTabControl; pc.Canvas.MoveTo(0,0); if not active then pc.Canvas.Brush.Color:=rgb(181,199,230) else pc.Canvas.Brush.Color:=clWhite; r:=rect; if not active then r.Bottom:=r.Bottom+2; pc.Canvas.FillRect(r); r:=rect; s:=pcPositionDetails.Pages[TabIndex].Caption; case tabPosTop of tabPosTop: begin r.Left:=r.Left+2; r.Top:=r.Top+3; if Active then begin r.Top:=r.Top+2; end; end; tabPosBottom: begin r.Left:=r.Left+2; r.Top:=r.Top; if Active then begin r.Top:=r.Top+4; end; end; tabPosLeft: begin r.Left:=r.Left+2; r.Top:=r.Bottom-4; if Active then begin r.Left:=r.Left+1; r.Top:=r.Top-1; end; end; tabPosRight: begin r.Left:=r.Left+14; r.Top:=r.Top+2; if Active then begin r.left:=r.left+4; r.Top:=r.Top+3; end; end; end; if tabPosTop in [tabPosLeft,tabPosRight] then begin GetObject(pc.Canvas.Font.Handle, sizeof(lf), @lf); if tabPosTop=tabPosLeft then lf.lfEscapement := 900 else lf.lfEscapement:= -900; lf.lfOrientation := lf.lfEscapement; if Active then lf.lfWeight:=700;
NewFont := CreateFontIndirect(lf); OldFont := SelectObject(pc.Canvas.Handle, NewFont); Windows.TextOut(pc.Canvas.Handle,r.Left,r.Top,pchar(s),length(s)); SelectObject(pc.Canvas.Handle,OldFont); DeleteObject(NewFont); end else begin if Active then begin pc.Canvas.Font.Style:=[fsBold]; r.Left:=r.Left+2; end else pc.Canvas.Font.Style:=[]; pc.Canvas.TextOut(r.Left,r.Top,s); end; end;
begin //PageControlDrawTab pc:=control as TcustomTabControl; pc.Canvas.MoveTo(0,0); pc.Canvas.Brush.Color:=rgb(237,240,242); fillColor; pc.Canvas.Brush.Color:=c[15-tabIndex]; ...
Undskyld mig, at jeg ikke har fået kigget på det i lang tid.
nop, jeg har nogle problemer med at få det til at virke. Altså:
- jeg laver et nyt projekt. - jeg laver en TabControl, som vi kalder TabControl1, og to tilhørende faner (tabs). - Herefter kopierer jeg din procedure "TfrmPositionDlg.pcPositionDetailsDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);" ind. Men hvordan skal toppen af koden se ud så? Dette virker i hvert fald ikke rigtigt.
private { Private declarations } public { Public declarations } end;
Og så lige nogle spørgsmål til parameterne. - 'Control' skal være min TabControl1. - 'TabIndex' skal være mit fanebladnummer. - 'const Rect' skal være hvad? - 'Active' skal være aktiv?
Og skal fillColor stå inde i den anden procedure før begin??? det vidste jeg ikke man kunne
Toppen skal rigtig nok ikke se sådan ud. Lav din tab control og dobbelt klik på eventet onDrawTab og paste min koden ind, på den måde så laver Delphi toppen osv. for dig. Og ja, fillColor skal kaldes inden i event-proceduren før man begynder at hente farver fra den selvfølgelig. Procedure kan altid kalde procedure der kan kalde procedure der kan...Og en procedure kan enda kalde sig selv det kaldes rekursivt kald.
Alle de nævnte parametere er nogen at Delphi folkene har lavet - det er dem der beskriver status/opsæt på tab-controlen, de giver næsten sig selv..... Rect er det område man har at tegne på (rectangle) i canvas'et, med lige netop det faneblad (tabIndex), active er om fanebladet er det der er valgt på tabben.
procedure TForm1.TabControl1DrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean); var pc: TcustomTabControl; s: string; r: Trect; lf: TLogFont; OldFont: hFont; NewFont: hFont; begin pc:=control as TcustomTabControl; //Se lige koden herfra igennem pc.Canvas.MoveTo(0,0); pc.Canvas.Brush.Color:=rgb(237,240,242); fillColor; pc.Canvas.Brush.Color:=c[15-tabIndex]; pc:=control as TcustomTabControl; // Hertil. if not active then pc.Canvas.Brush.Color:=rgb(181,199,230) else pc.Canvas.Brush.Color:=clWhite; r:=rect; if not active then r.Bottom:=r.Bottom+2; pc.Canvas.FillRect(r); r:=rect; s:=pcPositionDetails.Pages[TabIndex].Caption; case tabPosTop of tabPosTop: begin r.Left:=r.Left+2; r.Top:=r.Top+3; if Active then begin r.Top:=r.Top+2; end; end; tabPosBottom: begin r.Left:=r.Left+2; r.Top:=r.Top; if Active then begin r.Top:=r.Top+4; end; end; tabPosLeft: begin r.Left:=r.Left+2; r.Top:=r.Bottom-4; if Active then begin r.Left:=r.Left+1; r.Top:=r.Top-1; end; end; tabPosRight: begin r.Left:=r.Left+14; r.Top:=r.Top+2; if Active then begin r.left:=r.left+4; r.Top:=r.Top+3; end; end; end; if tabPosTop in [tabPosLeft,tabPosRight] then begin GetObject(pc.Canvas.Font.Handle, sizeof(lf), @lf); if tabPosTop=tabPosLeft then lf.lfEscapement := 900 else lf.lfEscapement:= -900; lf.lfOrientation := lf.lfEscapement; if Active then lf.lfWeight:=700;
NewFont := CreateFontIndirect(lf); OldFont := SelectObject(pc.Canvas.Handle, NewFont); Windows.TextOut(pc.Canvas.Handle,r.Left,r.Top,pchar(s),length(s)); SelectObject(pc.Canvas.Handle,OldFont); DeleteObject(NewFont); end else begin if Active then begin pc.Canvas.Font.Style:=[fsBold]; r.Left:=r.Left+2; end else pc.Canvas.Font.Style:=[]; pc.Canvas.TextOut(r.Left,r.Top,s); end; end;
end. "
og får fejlene:
" [Error] Unit1.pas(29): Undeclared identifier: 'c' [Error] Unit1.pas(61): Undeclared identifier: 'c' [Error] Unit1.pas(72): Undeclared identifier: 'pcPositionDetails' [Error] Unit1.pas(72): Missing operator or semicolon [Error] Unit1.pas(72): Missing operator or semicolon [Error] Unit1.pas(73): Undeclared identifier: 'tabPosTop' [Error] Unit1.pas(81): Undeclared identifier: 'tabPosBottom' [Error] Unit1.pas(81): Duplicate case label [Error] Unit1.pas(88): Undeclared identifier: 'tabPosLeft' [Error] Unit1.pas(96): Undeclared identifier: 'tabPosRight' [Error] Unit1.pas(96): Duplicate case label [Warning] Unit1.pas(107): Comparing signed and unsigned types - widened both operands [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' "
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.