Avatar billede athlon-pascal Juniormester
01. juni 2002 - 17:33 Der er 38 kommentarer og
3 løsninger

Linjer i RichEdit

2 spm.:

#1 Jeg er ved at lave en teksteditor (hvad ellers?) og ønsker at få vist linjenumre til venstre for min RichEdit.
F.eks.:
1
2
3
4
etc.

Stone's TextTool (http://www.stoneware.dk/texttool/dump.htm) og ConText ( http://www.fixedsys.com/context/, dog ej linjenumre på screenshots) er blandt de teksteditorer der har det.


#2 Hvordan laver man en Tab-kontroleret teksteditor? Førnævnte teksteditorer er netop Tab-kontroleret.

Bruger Delphi4 standard.

Eksperten er ikke bare et website
- Det er en livsstil!
Avatar billede Slettet bruger
01. juni 2002 - 19:56 #1
alle laver jo en tekst editor...
:/
Avatar billede athlon-pascal Juniormester
01. juni 2002 - 21:22 #2
Ved godt markedet er proppet, men det betyder vel bare at der er mange der kan hjælpe :)

I øvrigt er det kun tænkt til eget brug.
Man lærer jo også noget ved at lave en teksteditor.

Det jeg spørger om er muligt!
Avatar billede Slettet bruger
02. juni 2002 - 14:38 #3
okay så :)
Avatar billede athlon-pascal Juniormester
02. juni 2002 - 15:23 #4
Ingen der kan svare på bare ET af mine to spørgsmål?
Avatar billede stoney Nybegynder
02. juni 2002 - 23:48 #5
#2

Kan du ikke bare sætte richedit1.wanttabs := true ;

Stoney
Avatar billede martinlind Nybegynder
03. juni 2002 - 11:55 #6
Hent SynEdit den kan det hele og er OpenSource

http://SynEdit.SourceForge.net

/Martin
Avatar billede zerohero Nybegynder
03. juni 2002 - 12:08 #7
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!

ZeroHero
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 15:11 #8
Nu skete der jo noget :)
Jeg vil straks kigge på det, vender tilbage hurtigst muligt.
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 15:17 #9
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.

Jer andre -> Som skrevet: Jeg kigger på det :)
Avatar billede stoney Nybegynder
03. juni 2002 - 15:33 #10
Jeg har svaret på det tidligere, godt nok med en memo.
Men det er selvfølgelig det samme med en richedit

http://www.eksperten.dk/spm/173013

Stoney
Avatar billede zerohero Nybegynder
03. juni 2002 - 15:40 #11
Prøv dette... du skal bare have en Tabcontrol, RichEdit, Button og en OpenDialog komponent på din form inden du kompiler...

var
  Form1: TForm1;
  fil01, fil02 : Tstringlist;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  fil01 := Tstringlist.create;
  fil02 := Tstringlist.create;
  tabcontrol1.tabs.add('Fil01');
  tabcontrol1.tabs.add('Fil02');
  richedit1.clear;
end;

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;

ZeroHero
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:00 #12
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å :)
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:11 #13
Aha... Gutter.ShowLineNumbers...
Har ikke lige fået kigget på de sidste svar, det vil jeg gøre nu!
Avatar billede zerohero Nybegynder
03. juni 2002 - 16:25 #14
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;

ZeroHero
Avatar billede zerohero Nybegynder
03. juni 2002 - 16:28 #15
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!!!
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:28 #16
Stoney -> Umidlbart virker det, men hvad nu hvis hver tab skal vise den tilhørende fils respektive icon? (nye "dukumenter" skal have et standardicon).

Zerohero -> Ligesom i Delphis editor...
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:31 #17
Zerohead -> Siden jeg gik i gang med at skrive mit sidste indlæg ser jeg at du er kommet med et par nye indlæg. Jeg kigger på det.
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:48 #18
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.
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 16:50 #19
Martinlind -> SunEdit er et super component, jeg kan sikkert bruge det.

Jer andre -> Giv ikke op på grund af overstående, jeg vil nemlig prøve om det kan gøres med en RichEdit.
Avatar billede martinlind Nybegynder
03. juni 2002 - 17:05 #20
Jep, så hvorfor skulle man opfinde den dybe igen, Den kan bare ALT den der SynEdit, og med et hav af syntaks highlithing

/Martin
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 17:06 #21
SunEdit=SynEdit :)
(Håber ikke i har ledt på SUNs website http://www.sun.com/)...
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 17:07 #22
Matinlind -> Jeg kan ikke finde en funktion til tabs, skal man selv gøre det?
Avatar billede zerohero Nybegynder
03. juni 2002 - 17:09 #23
prøv dette....

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;
Avatar billede zerohero Nybegynder
03. juni 2002 - 17:10 #24
ps: nu stopper den ved linje 6... hvis du vil have den til at stoppe ved et andet tal så bare ændre det...
Avatar billede martinlind Nybegynder
03. juni 2002 - 17:11 #25
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.

/Martin
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 17:13 #26
Martinlind/Stoney -> Hvordan viser man filernes respektive iconer i tab'sene?
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 17:15 #27
Holder lige pause fra E., vender tilbage snarest.
Avatar billede martinlind Nybegynder
03. juni 2002 - 17:18 #28
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

/Martin
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 19:47 #29
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.

Kan man ikke lave noget med en ImageList?
Avatar billede martinlind Nybegynder
03. juni 2002 - 19:52 #30
Jo, du skal ud på nettet og søge efter opskriften evt. www.undu.com eller www.borland.com
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 20:03 #31
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...
Avatar billede martinlind Nybegynder
03. juni 2002 - 20:09 #32
Ok, så skal du nok kigge efter en property på TabSheet'et der hedder ImageIndex, og måske også en property der hedder ShowImages på PageControl'en

/Martin
Avatar billede athlon-pascal Juniormester
03. juni 2002 - 20:15 #33
Det vil jeg prøve :)
Avatar billede athlon-pascal Juniormester
04. juni 2002 - 14:47 #34
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?
Avatar billede martinlind Nybegynder
04. juni 2002 - 15:58 #35
Vender tilbage i aften
Avatar billede athlon-pascal Juniormester
04. juni 2002 - 16:10 #36
OK
Avatar billede martinlind Nybegynder
05. juni 2002 - 10:56 #37
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.
Avatar billede athlon-pascal Juniormester
05. juni 2002 - 14:18 #38
JB, er det James Bond?
Eller Jens Borrisholt?
Avatar billede athlon-pascal Juniormester
05. juni 2002 - 14:21 #39
Jeg tror jeg lukker her og laver et nyt spørgsmål når jeg får point nok :)

Håber ikke nogen bliver utilfredse med min pointfordeling.
Avatar billede martinlind Nybegynder
05. juni 2002 - 14:33 #40
JB er IKKE James Bond *G*
Avatar billede athlon-pascal Juniormester
05. juni 2002 - 14:36 #41
Troede lige...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester