Jeg ville bruge en anden TWinControl til vise linje-nummerene eksempelvis en Tlistbox, Tpanel eller måske bare lade denm blive vist på min Tform. Her bruger jeg bare Tformen:
sæt eventuelt koden i richedit1's OnChange eller OnEnter event:
var i : integer; begin canvas.brush.color := color; for i := 0 to richedit1.lines.count-1 do with richedit1 do canvas.textout(left-10,top+(i*canvas.TextHeight('I')),inttostr(i)); end;
bemærk at tallene bliver tegnet 10 pixels til venstre for din Trichedit!
Stoney -> Det jeg mener er ikke at man via tabulator-tasten på tastaturet skal kunne hoppe videre til næste control, men derimod at man skal kunne have flere filer åbne i min tekseditor og så navigere mellem dem via en tab/page-control (eller noget i den retning), lige som i Delphis editor.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin fil01.free; fil02.free; end;
procedure TForm1.Button1Click(Sender: TObject); begin if opendialog1.execute then case tabcontrol1.tabindex of 0: fil01.loadfromfile(opendialog1.filename); 1: fil02.loadfromfile(opendialog1.filename); end;//case tabcontrol1change(nil); end;
procedure TForm1.TabControl1Change(Sender: TObject); begin richedit1.clear; case tabcontrol1.tabindex of 0: richedit1.lines.addstrings(fil01); 1: richedit1.lines.addstrings(fil02); end;//case caption := inttostr(fil01.count)+' '+inttostr(tabcontrol1.tabindex); end;
Martinlind -> Hvordan får man SynEdit (der virker som et rigtig fedt component) til at gøre det jeg vil?
Zerohero -> Det med linjenumrene: Der kommer godt nok linjenumre, men den starter med 0 og den aktuelle linje får ikke et nummer. Hvis jeg laver et par linjer og sletter dem igen, så står tallene der stadigvæk. Laver jeg så mange linjer at man skal scrolle i RichEditen for at se dem alle, så "følger talene ikke med", men fortsætter ud over formens område.
Det der er kommet siden mit sidste indlæg skal jeg nok få kigget på :)
Jamen hør nu her. Jeg er klar over alle de ting du kommentere, men meningen med eksperten er jo at lære. Jeg har vist dig grundprincippet og så må du jo arbejde videre derfra - det lære du mest af. Men for at løse lidt af dine problemer (jeg gik nemlig ud fra at du kendte til canvas, men det gør du åbenbart ikke) indsæt eventuelt fillrect(clientrect); først... det gør at den sletter alt og er klar til at tegne nyt! Så er du uden om problemet med at, hvis du sletter linjer i din TRichEdit så vil den også slette linje numrene. For at forøge dine linjenumre så den start med 1 i stedet for nul er meget simpelt. Du siger bare at den skal starte med 1 i stedet nul dit nye kode ser nu således ud:
var i : integer; begin canvas.fillrect(clientrect); canvas.brush.color := color; for i := 0 to richedit1.lines.count-1 do with richedit1 do canvas.textout(left-10,top+(i*canvas.TextHeight('I')),inttostr(i+1)); end;
PS: Husk at din Tabcontrol også har en canvas, den kan du sagtens bruge i stedet for din form's canvas , i tilfælde af du vil have din TRichEdit til at ligge på den i stedet!!!
Zerohead -> Hvordan får jeg numrene til at "scrolle med"?
Forresten er
var i : integer; begin canvas.fillrect(clientrect); canvas.brush.color := color; if length(richedit1.lines[richedit1.lines.count])>0 then for i := 0 to richedit1.lines.count-1 do with richedit1 do canvas.textout(left-10,top+(i*canvas.TextHeight('I')),inttostr(i+1)) else for i := 0 to richedit1.lines.count do with richedit1 do canvas.textout(left-10,top+(i*canvas.TextHeight('I')),inttostr(i+1)); end;
bedre.
Har ikke lige Delphi foran mig, håber jeg fik skrevet det rigtigt.
var i : integer; begin with canvas do begin brush.color := color; fillrect(clientrect); with richedit1 do begin if length(lines[lines.count-1]) > 0 then begin for i := 0 to lines.count-1 do if i < 6 then textout(left-10,top+2+(i*textheight('I')),inttostr(i+1)); end else for i := 0 to lines.count-1 do if i < 6 then textout(left-10,top+2+(i*textheight('I')),inttostr(i)); end; end; end;
Ja, det er kun Editor-memo'en du får med SynEdit, men det med tabs, kan du gøre som stoney skrev, det er bare en funtion til at oprette en ny "Page" med en SynEdit på, den får du hurtigt brygget sammen.
Hvis det var D4 std. du havde, vil jeg anbefale at du henter en D6 personal, den er gratis, for der kan du bare sætte din Page comp. til at vise bitmap's vist nok fra en ImageList comp., men i D4 skal du lave det som OwnerDraw, du kan finde eks. på nettet med jeg har det sådan at jeg helst bruger så meget std. VCL som overhovedet muligt, og det er ikke den eneste FEDE nyhed i D6
Jeg ved godt D6 p. er gratis, men min computer er ikke verdens hurtigste (166 MHz Pentium MMX, 32MB RAM, 2GB harddisk, Win98 (ikke SE),(Skifter ikke til Win95)). Men så er den også bærbar. D4 er ikke specielt hurtig på min computer, så hvad med D6? I øvrigt kniber det tilstrækeligt med pladsen i forvejen.
Det er da muligt at bruge PageControl.Images, altså ImageLists, i D4 standard (i hvert fald hos mig!). Så: Hvordan gør man i D6, det er nok ca. det samme...
Hvordan gir jeg hver Tab den tilhørende fils respektive icon? (gentagelse)
Eller: Hvordan tar jeg iconer ud af exe-filer, dll-filer, cpl-filer, ico-filer, bmp-filer (windows kan godt bruge bmp-billeder som iconer) og over i en ImageList? Hvordan kontrolerer jeg det?
Jeg mener JB har nogle eks. på det med icon'er fra filerne, jeg tror faktisk og du kan finde et eks. her på eksperten, det er ikke noget jeg har rodet med, så jeg har ikke lige et eks.
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.