Toon posts:

[delphi] wat is hier mis mee?

Pagina: 1
Acties:
  • 110 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
  with richedit1 do
  begin
    if text[selstart]='<' then selattributes.color:=clblue;
    if text[selstart]='>' then selattributes.color:=clblack;
  end;
end;

delphi loopt elke keer vast als ik het probeer uit te voeren..
en niet alleen bij dat, delphi loopt zo vaak vast :( :'(

:r


delphi 6 enterprise op windows xp pro (ja de echte geen beta >:) )

is de code fout of is delphi gewoon fout bezig :?


edit: en heeft iemand misschien een goede tip om simpel syntax highlighting toe te passen?
hoeft absoluut niet uitgebreid is alleen ff een paar testjes om delphi een beetje te leren kennen :7

torry.ru heb ik al gekeken maar kreeg een component onder D6 niet aan de gang :( en ze zijn ook erg uitgebreid allemaal.. das niet nodig ;)

Verwijderd

Topicstarter
tis misschien een lompe vraag :P
maarja kben pas net (2 dagen) met delphi bezig :(

dit moet ik dus eigenlijk ff weten:

in een richedit box word dus zooi ingetypt.

[pseudo code]
als (string = <html> || <head> || body)
string kleur = blauw;
anders
string kleur = zwart;
[/pseudo code]

dan zal ik wel een complete imbeciel zijn :7
maar ik kom er in delphi nou echt ff nie uit :( :(

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Op maandag 10 september 2001 05:06 schreef ScitzoFreak het volgende:
code:
1
2
3
4
5
6
7
8
procedure TForm1.RichEdit1Change(Sender: TObject);
begin
  with richedit1 do
  begin
    if text[selstart]='<' then selattributes.color:=clblue;
    if text[selstart]='>' then selattributes.color:=clblack;
  end;
end;
Ik heb je code ff snel gestest met Delphi 3 en hij werkt. Alleen als ik alles selecteer en op Delete druk dan geeft die een fout:
Afbeeldingslocatie: http://www.delpix.f2s.com/hp/fout.gif

...beter bekend als AMFan


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 23:04

Knutselsmurf

LED's make things better

En Da's niet zo verwonderlijk. Als je alles selecteerd is selstart gelijk aan 0, terwijl het eerste karakter van een string index 1 heeft. Je moet selstart dus vervangen door selstart+1

- This line is intentionally left blank -


  • Elissen
  • Registratie: Januari 2000
  • Laatst online: 27-07 15:54
Dan ga je nog op je bek. Je kunt beter kijken of er wel tekst in staat. if length(text) > 0 then...
of if text <> '' then...

Verwijderd

Waar wordt selstart gedeclareert? (hopelijk niet globaal)
Initialiseer je selstart wel? (oftewel geef je hem een waarde voordat je hem gebruikt-> selstart :=1;)
Als je hem zonodig globaal moet declareren gebruik hem dan in godsnaam voor 1 doel anders verlies je totaal zicht op wat voor waarde hij wanneer gaat aannemen.

ik vraag dit maar even omdat het handig is en omdat de fout die je krijgt een geheugentoegangs fout is. hij probeert geheugen uit te lezen in een gedeelte van het geheugen waar hij geen toegang hebt. als je selstart namelijk niet initialiseerd dan neemt hij een random waarde aan.
text[2341235421512554523] bestaat waarschijnlijk niet :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 11 september 2001 01:29 schreef Venger het volgende:
Blah.
Volgende keer eerst iets over het onderwerp leren voordat je er een vraag over beantwoord met onzin.

SelStart is een member-property van richedit1, dus dit werkt als een tiet binnen het 'with'-blok dat ie gebruikt. Inderdaad moet je zoals Knutselsmurf al meldt sowieso 1 bij de SelStart optellen, en je moet natuurlijk wel eerst checken of er wel een selectie is. Tevens is de SelText property handiger (en korter in notatie) voor dit geval.

In C++Builder zou het zijn (ik moet toch een keer Delphi leren :) ):
code:
1
2
3
4
5
6
7
if(RichEdit1->SelLength)
  {
  if    (RichEdit1->SelText[1] == '<')
    RichEdit1->SelAttributes->Color    = clBlue;
  else if (RichEdit1->SelText[1] == '>')
    RichEdit1->SelAttributes->Color    = clBlack;
  }

Kleine sidenote uit ervaring: RICHEDIT IS TOTAAL NIET GESCHIKT OM SYNTAX-HIGHLIGHTED EDITORS TE MAKEN.

Dat wou ik nog ff kwijt ;)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 10 september 2001 12:05 schreef Delpix het volgende:
Ik heb je code ff snel gestest met Delphi 3 en hij werkt. Alleen als ik alles selecteer en op Delete druk dan geeft die een fout:
[afbeelding]
Echt? :)

Op dat moment is je tekstveld LEEG, en AnsiString werkt intern met ref-counted copy-on-demand strings, en onthoudt dan ook geen lege strings: deze worden opgeslagen als NULL-pointers. Vervolgens gooi je daar de index-operator overheen, die (even uit het blote bolletje, lang geleden dat ik ernaar gekeken heb) ongeveer als volgt is geinterpreteerd:
code:
1
2
3
4
5
6
  inline char& operator[](int idx)
    {
    if(idx > InternalString->Length)
    throw EOutOfBounds;
    return InternalString->Data[idx - 1];
    }

Oftewel jij stopt hier index 0 in, en de Data property van de interne string wijst naar 0. Jij gaat dus een karakter uitlezen op adres 0 - 1, oftewel 0xFFFFFFFF. Gezien het feit dat dat geheugen niet van jouw proces is, krijg je hierop een (tromgeroffel...) : Access Violation, read of address 0xFFFFFFFF!!!

Het is niet zo moeilijk jongens :7

Professionele website nodig?


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

als ik heb goed heb probeer je je eigen editor te maken, oefen eerst andere dingen in Delphi voordat je componenten begint aan te passen! Ik weet niet of je goed in Object Oriented programming bent, maar aangezien de componenten 100% OO zijn krijg je allerlei leuke zaken zoals overerving etc.

je kunt beter eerst oefenen met het richtext voorbeeld in de demo dir!

Cogito Ergo Credo


Verwijderd

tjah, ik ben niet de topic starten bij de weg, ik heb ook intresse, weet nu niemand hoe het moet??

Verwijderd

Topicstarter
Op dinsdag 11 september 2001 07:54 schreef jopiek het volgende:
als ik heb goed heb probeer je je eigen editor te maken, oefen eerst andere dingen in Delphi voordat je componenten begint aan te passen! Ik weet niet of je goed in Object Oriented programming bent, maar aangezien de componenten 100% OO zijn krijg je allerlei leuke zaken zoals overerving etc.

je kunt beter eerst oefenen met het richtext voorbeeld in de demo dir!
nee ik wil niets bijzonders maken, het gaat erom om delphi een beetje onder de knie te krijgen, object pascal blijft toch een 'aparte' taal :D

vergeet elke keer de ':' bij blaat := blaat :o

en soms ook leuke andere situaties,

for (int i=1; i<25; i++) {
}

(en dan moet ik eerst 25 keer de code doorspitten om te zien dat ik op dat punt met men hoofd ergens anders was |:( :+ )

maar het is toch een erg leuke taal dat object pascal, maar verschrikkelijk wennen :(

Verwijderd

Ik zou sowiezo voor highlighting nooit een richedit-box gebruiken aangezien die niet echt bar snel is..

beter kan je zelf een highlight-box bouwen van scratch, dan kan je echt veel snelheids winst boeken..

Verwijderd

Ja maar dat is wel ontzettend vele werk of niet soms

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op dinsdag 11 september 2001 09:54 schreef ceidhof het volgende:
Ja maar dat is wel ontzettend vele werk of niet soms
RichEdit als syntaxhighlighter werkt op ruwweg 1 aanslag per seconde.

Zoals ik al zei heb ik het een keer als prototype geprobeerd, waarna we (hier op m'n werk) een compleet eigen editor hebben geschreven die een factortje 1000 of zo sneller is (geen grap).

Het kost wat tijd, maar het loont de moeite.

Professionele website nodig?


Verwijderd

Op dinsdag 11 september 2001 12:29 schreef curry684 het volgende:
editor hebben geschreven die een factortje 1000 of zo sneller is (geen grap).
dan kan je echt veel snelheids winst boeken.. ;)

Verwijderd

tjah ik zoek ook wel zo'n highlight memo , maar kan het nergens vinden

Verwijderd

niemand?
Pagina: 1